কেন
আমি এই পৃষ্ঠার সমস্ত সমাধানের সাথে সন্তুষ্ট নই ( আসুন, আমাদের প্রিয় কপি-পেস্ট জিনিসটি কোথায়? ) তাই আমি এখানে উত্তরগুলির উপর ভিত্তি করে আমার নিজের লিখেছি। এটি সম্পূর্ণ এবং আরও পাইথোনিক হওয়ার চেষ্টা করে। আমি আরও ভোক্তা-পক্ষ ( জেএস ) বন্ধুত্বপূর্ণ হওয়ার জন্য যুক্তিতে ডিক এবং বুল মানগুলির জন্য একটি হ্যান্ডলার যুক্ত করেছি , তবে তারা এখনও alচ্ছিক, আপনি এগুলি ফেলে দিতে পারেন।
কিভাবে এটা কাজ করে
পরীক্ষা 1: নতুন যুক্তি যুক্ত করা, অ্যারে এবং বুল মানগুলি পরিচালনা করা:
url = 'http://stackoverflow.com/test'
new_params = {'answers': False, 'data': ['some','values']}
add_url_params(url, new_params) == \
'http://stackoverflow.com/test?data=some&data=values&answers=false'
পরীক্ষা 2: ডিআইসিটি মানগুলি পরিচালনা করে বিদ্যমান আরোগুলি পুনর্লিখন:
url = 'http://stackoverflow.com/test/?question=false'
new_params = {'question': {'__X__':'__Y__'}}
add_url_params(url, new_params) == \
'http://stackoverflow.com/test/?question=%7B%22__X__%22%3A+%22__Y__%22%7D'
টক সস্তা। আমাকে কোডটি দেখান
কোড নিজেই। আমি এটিকে বিশদে বর্ণনা করার চেষ্টা করেছি:
from json import dumps
try:
from urllib import urlencode, unquote
from urlparse import urlparse, parse_qsl, ParseResult
except ImportError:
# Python 3 fallback
from urllib.parse import (
urlencode, unquote, urlparse, parse_qsl, ParseResult
)
def add_url_params(url, params):
""" Add GET params to provided URL being aware of existing.
:param url: string of target URL
:param params: dict containing requested params to be added
:return: string with updated URL
>> url = 'http://stackoverflow.com/test?answers=true'
>> new_params = {'answers': False, 'data': ['some','values']}
>> add_url_params(url, new_params)
'http://stackoverflow.com/test?data=some&data=values&answers=false'
"""
# Unquoting URL first so we don't loose existing args
url = unquote(url)
# Extracting url info
parsed_url = urlparse(url)
# Extracting URL arguments from parsed URL
get_args = parsed_url.query
# Converting URL arguments to dict
parsed_get_args = dict(parse_qsl(get_args))
# Merging URL arguments dict with new params
parsed_get_args.update(params)
# Bool and Dict values should be converted to json-friendly values
# you may throw this part away if you don't like it :)
parsed_get_args.update(
{k: dumps(v) for k, v in parsed_get_args.items()
if isinstance(v, (bool, dict))}
)
# Converting URL argument to proper query string
encoded_get_args = urlencode(parsed_get_args, doseq=True)
# Creating new parsed result object based on provided with new
# URL arguments. Same thing happens inside of urlparse.
new_url = ParseResult(
parsed_url.scheme, parsed_url.netloc, parsed_url.path,
parsed_url.params, encoded_get_args, parsed_url.fragment
).geturl()
return new_url
দয়া করে সচেতন হন যে কিছু সমস্যা থাকতে পারে, আপনি যদি একটি সন্ধান করেন তবে দয়া করে আমাকে জানান এবং আমরা এই জিনিসটিকে আরও ভাল করে দেব
urlparse.parse_qs
পরিবর্তে ব্যবহার করতে চানparse_qsl
। পরেরটি একটি তালিকা দেয় যেখানে আপনি ডিক চান। ডকস.পাইথন.আর . / লাইবারি/urlparse.html#urlparse.parse_qs দেখুন ।