【问题标题】:New url syntax from django 1.3/dev onwards从 django 1.3/dev 开始的新 url 语法
【发布时间】:2011-08-17 10:20:20
【问题描述】:

为什么django核心开发者允许url模板标签直接指向一个django视图函数? (参考-https://docs.djangoproject.com/en/dev/ref/templates/builtins/#url

{% load url from future %}

{# 1st method: pointing to a view function #}
{% url 'app_views.client' %}

{# 2nd method: pointing to a named url #}
{% url 'myapp:view-name' %}

已经可以在 urls.py 中命名 url,因此使用第二种方法指向特定的 url。让开发人员直接从模板中直接引用视图函数感觉不对。

有人知道为什么会做出这个决定吗?

【问题讨论】:

标签: django django-templates


【解决方案1】:

将虚线视图函数名称传递给 {% url %} 模板标签只是模板标签在 Django 早期采用的形式,在您可以命名 URL 之前。它仍然受支持,但正如您所指出的,您可能不会在现代应用程序中使用它。

【讨论】:

  • 啊哈。所以它只是为了向后兼容。感谢您的信息。
  • 是的,但这在 1.3 中并不新鲜。 view-style url 标签与 Django 一样长,而 named-style 早在 0.9.x 时代 Django 的里程碑发布之前就引入了。
【解决方案2】:

Django 中的 URL 只是到视图的映射。因此,在模板中,使用命名 URL 只是间接引用视图。

例外情况是单个视图被多个 URL 映射到。

另请注意,他们计划在 1.5 中 change the syntax of the url tag。它将一个上下文变量作为参数,而不是一个字符串。但它仍然会接受视图或命名 URL。

【讨论】:

  • 只有“1 个地方”让我可以直观地找到我的命名网址感觉更干净。即在我的“urls.py”文件中。在开发团队的环境中工作,这些小小的约定提高了效率并降低了协调成本。就个人而言,我会尽可能避免在模板中使用第一种方法。这就是为什么我很困惑它甚至在一开始就被支持......
  • 如果您不遵循始终使用命名 URL 的约定,而是遵循始终使用视图名称的约定,则实际上是相同的事情,但不必实际命名 URL。 Less code!
猜你喜欢
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2018-05-18
相关资源
最近更新 更多