34

Djangoのテンプレート言語では{% url [viewname] [args] %}、パラメーターを使用して特定のビューへのURLを生成するために使用できます。Pythonコードでプログラムで同じことをどのように行うことができますか?

必要なのは、各項目に名前、URL、およびアクティブなフラグ(現在のページであるかどうかに関係なく)があるメニュー項目のリストを作成することです。これは、テンプレート言語よりもPythonでこれを行う方がはるかにクリーンになるためです。

4

4 に答える 4

41

{% 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

于 2008-09-04T07:54:57.923 に答える
10

私は .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)])
于 2008-09-11T03:05:27.200 に答える
4

を使用reverse()するには、urlconf モジュールに 100% エラーがなく、処理できることが必要であることに注意してください。エラーがまったくないViewDoesNotExistか、またはそうでないと、恐ろしいNoReverseMatch例外が発生します (通常、テンプレートのエラーは黙って失敗し、None.

于 2008-09-16T13:36:56.580 に答える