【问题标题】:Django URL names use in Templates模板中使用的 Django URL 名称
【发布时间】:2023-03-20 05:45:01
【问题描述】:

现在在我的模板中,我将导航中的链接硬核化,如下所示:

`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>

【问题讨论】:

标签: python django django-templates django-urls


【解决方案1】:

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

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

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

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

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

这为您提供了更大的灵活性。现在任何时候aboutcontact 页面的实际网址发生变化,模板都会自动“赶上”变化。

【讨论】:

    【解决方案2】:

    将 Django 的 url 模板标签(文档 here)与您的命名 url 模式一起使用。

    例子:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 2013-04-21
      • 2012-05-14
      • 2018-04-13
      • 1970-01-01
      • 2011-01-12
      • 2011-09-28
      相关资源
      最近更新 更多