GET
URLからパラメータを削除する必要がありました。私はそれを行うには「正しい」方法を見つけることができませんでしたので、私はこのように私自身のフィルタを書いた:GETパラメータを正しく削除する方法
@register.filter(name='url_without_parameter')
def url_without_parameter(arg1, arg2):
"""
Removes an argument from the get URL.
Use:
{{ request|url_without_parameter:'page' }}
Args:
arg1: request
arg2: parameter to remove
"""
if arg1.GET.getlist(arg2):
# get all parameters :
full_url = urlparse.urlparse(arg1.get_full_path())
parameters = {}
# reconstruct query
for key, value in urlparse.parse_qsl(full_url.query):
if parameters.get(key, None) is None:
parameters[key] = value
# remove parameters
if parameters.get(arg2) is not None:
del parameters[arg2]
arg1.META['QUERY_STRING'] = u'&'.join([
u'{}={}'.format(key, value)
for key, value in parameters.iteritems()])
return arg1.get_full_path()
それから私はこのようにそれを使用しています:
{{ request|url_without_parameter:'page' }}
と高度な方法次のとおりです。URLのGET
内の他のパラメータが存在しないとき
href="{{ request|url_without_parameter:'page' }}&page={{ obj.page }}"
私の問題はあります。これにより、「/test&page=1
」のようなURLが作成されます。
だから私はそのように、この仕事をするために別のフィルタを書かなければならなかった:私のurl_get_separator
フィルター付き
href="{{ request|url_without_parameter:'page' }}{{ request|url_get_separator }}page={{ obj.page }}"
。
@register.filter(name='url_get_separator')
def url_get_separator(arg1):
"""
Returns '?' or '&' if there are QUERY parameters in the URL
Use:
{{ request|url_get_separator }}
Args:
arg1: request
"""
return u'&' if arg1.META.get('QUERY_STRING', '') else u'?'
このすべてはかなり醜いもので、読みにくく、維持するのが難しいものです。 URL内のGET
の値を置き換えるだけの他の方法がありますか?
django-url-tools、特に 'overload_params'と' del_params' [テンプレートタグ](https://bitbucket.org/monwara/django-url-tools#rst-header-id39)を試してみてください。 。 [この質問](http://stackoverflow.com/questions/16469224/django-template-tag-to-insert-or-replace-url-parameter)も参照してください。 – Alasdair