2008-09-04 15 views
24

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

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

答えて

34

コードに{% url %}テンプレートタグと同様のものを使用する必要がある場合、Djangoはdjango.core.urlresolvers.reverse()を提供します。私は私のmodels.pyで2つの異なるアプローチを使用してい

reverse(viewname, urlconf=None, args=None, kwargs=None) 

https://docs.djangoproject.com/en/dev/ref/urlresolvers/

8

reverse関数は次のシグネチャがあります。最初は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)]) 
+0

これはデコレータの使用と同じですか? @ models.permalink –

4

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

関連する問題