DjangoでURLを生成する方法
-
09-06-2019 - |
質問
Django のテンプレート言語では、次のように使用できます。 {% url [viewname] [args] %}
パラメーターを使用して特定のビューへの URL を生成します。Python コードで同じことをプログラム的に行うにはどうすればよいでしょうか?
必要なのは、各項目に名前、URL、およびアクティブなフラグ (現在のページかどうか) が含まれるメニュー項目のリストを作成することです。これは、テンプレート言語よりも Python でこれを実行する方がはるかに簡単だからです。
解決
同様のものを使用する必要がある場合は、 {% url %}
コード内の template タグでは、Django が提供する django.core.urlresolvers.reverse()
. 。の reverse
関数には次のシグネチャがあります。
reverse(viewname, urlconf=None, args=None, kwargs=None)
他のヒント
私は 2 つの異なるアプローチを使用しています models.py
. 。1つ目は、 permalink
デコレータ:
from django.db.models import permalink
def get_absolute_url(self):
"""Construct the absolute URL for this Item."""
return ('project.app.views.view_name', [str(self.id)])
get_absolute_url = permalink(get_absolute_url)
電話をかけることもできます reverse
直接:
from django.core.urlresolvers import reverse
def get_absolute_url(self):
"""Construct the absolute URL for this Item."""
return reverse('project.app.views.view_name', None, [str(self.id)])
使用することに注意してください reverse()
urlconf モジュールに 100% エラーがなく、処理できることが必要です - いいえ ViewDoesNotExist
エラーかそこら、そうでないと恐ろしいことになる NoReverseMatch
例外 (テンプレート内のエラーは通常、通知なしで失敗し、 None
).
所属していません StackOverflow