Djangoのテンプレート言語では{% url [viewname] [args] %}
、パラメーターを使用して特定のビューへのURLを生成するために使用できます。Pythonコードでプログラムで同じことをどのように行うことができますか?
必要なのは、各項目に名前、URL、およびアクティブなフラグ(現在のページであるかどうかに関係なく)があるメニュー項目のリストを作成することです。これは、テンプレート言語よりもPythonでこれを行う方がはるかにクリーンになるためです。
Djangoのテンプレート言語では{% url [viewname] [args] %}
、パラメーターを使用して特定のビューへのURLを生成するために使用できます。Pythonコードでプログラムで同じことをどのように行うことができますか?
必要なのは、各項目に名前、URL、およびアクティブなフラグ(現在のページであるかどうかに関係なく)があるメニュー項目のリストを作成することです。これは、テンプレート言語よりもPythonでこれを行う方がはるかにクリーンになるためです。
{% url %}
コードでテンプレートタグに似たものを使用する必要がある場合は、Djangoがを提供しdjango.core.urlresolvers.reverse()
ます。このreverse
関数には次のシグネチャがあります。
reverse(viewname, urlconf=None, args=None, kwargs=None)
https://docs.djangoproject.com/en/dev/ref/urlresolvers/
この編集の時点で、インポートはdjango.urls import reverse
私は .NET で 2 つの異なるアプローチを使用していmodels.py
ます。最初は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
.