URL をハードコーディングし、タイトル コンテキスト アイテムを連結してテンプレートにクエリ文字列を作成する代わりに、django.core.urlresolvers.reverse() を使用し、関連する urls.py ファイルから名前付き URL を指定して、少し単純化することを検討してください。URL の変更を気にする必要がない場合は、すっきりとしたデザインになります。ビュー セットのコンテキスト変数をリバース コールの結果に単に割り当てるのではなく、変更しなければならないすべての散在する HREF の頭痛の種を想像してみてください。クエリ文字列もビューに適切に追加できます。しばしば奇妙なテンプレート解析ルールのいくつかについて心配する必要はありません。urllib.urlencode 関数は、同じ名前のテンプレート フィルターとはまったく異なる動作をすることに注意してください。混乱しないでください!次のように使用できます。
# If the entry in URLConf has named capture groups such as ?<pk>,
# pass a dict as kwargs parameter instead.
url = reverse('your-named-url', args=(1, 1)) # e.g '/question/tag/1/1/'
# Encodes as form data to 'list_id=Django+%2B+Python'
querystring = urllib.urlencode({'list_id': 'Django + Python'})
context['question_url'] = '{}?{}'.format(url, querystring)
次に、テンプレートでは、次のように単純にすることができますhref="{{ question_url }}"
。より多くの作業のように見えるかもしれませんが、それは非常に迅速に報われる可能性があり、関心の分離がはるかに優れています. 通常は{% url "your-named-url" %}
テンプレート タグを使用しますが、現在はクエリ文字列を適切に処理していません。つまり、URLConf で定義された URL 引数と kwargs を処理するのと同じ方法ではありません。