Django URL名称在模板中使用

时间:2014-05-02 01:14:45

标签: python django django-templates django-urls

现在,在我的模板中,我将导航中的链接硬着如下:

`base.html`

<a href="/about">About</a>
<a href="/contact">Contact</a>
<!-- etc -->

在我的urls.py

urlpatterns = patterns('',
    url(r'^about/$', TemplateView.as_view(template_name='pages/about.html'), name='about'),
    url(r'^contact/$', TemplateView.as_view(template_name='pages/contact.html'), name='contact'),
 )

有没有办法在我的base.html文件中引用来自urls.py的urlpatterns,以便我随时更改它们,它反映了我的页面和模板的所有地方?像

这样的东西
<!-- what I would like to do -->
<a href="{{ reference_to_about_page }}">About</a>
<a href="{{ reference_to_contact_page }}">About</a>

2 个答案:

答案 0 :(得分:6)

这就是发明url标签的原因:

  

返回绝对路径引用(不带域名的URL)   匹配给定的视图函数和可选参数。

     

如果你是   使用命名的URL模式,您可以参考模式的名称   url标记,而不是使用视图的路径。

这基本上意味着您可以使用urlpatterns标记中url配置的网址名称:

<a href="{% url 'about' %}">About</a>
<a href="{% url 'contact' %}">Contact</a>

这为您提供了更大的灵活性。现在,只要aboutcontact页面的实际网址发生变化,模板就会“赶上”#34;自动变化。

答案 1 :(得分:0)

将Django的url模板标记(docs here)与您指定的网址格式一起使用。

示例:

<a href="{% url 'about' %}">About</a>
<a href="{% url 'contact' %}">Contact</a>

请注意,您在' '中输入的名称将是name中特定网址格式的urls.py。另外,如果这是应用中的urls.py文件(也就是说,它最初从基座urls.py路由),则您需要包含应用的命名空间。