2008-09-04 15 views
24

Django'nun şablon dilinde, parametrelerle belirli bir görünüme bir URL oluşturmak için {% url [viewname] [args] %} kullanabilirsiniz. Python kodunda nasıl programlı olarak yapabilirsiniz?django'da url'ler nasıl oluşturulur

İhtiyacım olan şey, her öğenin adı, URL'si ve etkin bayrağı (geçerli sayfa olsun ya da olmasın) olduğu menü öğelerinin bir listesini oluşturmaktır. Bunun nedeni, Python'da bunu şablon dilinden daha iyi yapmasıdır.

cevap

8

benim models.py iki farklı yaklaşım kullanıyorum: reverse işlev aşağıdaki imzası vardır. hayır Iow -

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

Bu, dekoratörün kullanımıyla aynı mı? @ models.permalink –

4

reverse() kullanarak urlconf modülü% 100 hatasız ve işlenebilir gerektirir unutmayın:

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) 

Ayrıca çağırabilirsiniz reverse doğrudan: İlk permalink dekoratör olduğunu ViewDoesNotExist hataları ya da öylesine, ya da korkuyorsunuz NoReverseMatch istisnası (şablonlardaki hatalar genellikle sessizce başarısız oluyor None).