繁体   English   中英

{%url'x'y%}在Django中如何工作?

[英]How does {% url 'x' y %} function in Django?

在Django教程( https://docs.djangoproject.com/en/1.11/intro/tutorial03/ )中,建议不要在模板中“硬编码” URL。 例如,以下代码段:

<ul>
{% for question in latest_question_list %}
    <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
{% endfor %}
</ul>

应替换为:

<ul>
{% for question in latest_question_list %}
    <li><a href="{% url 'detail' question.id %}/">{{ question.question_text }}</a></li>
{% endfor %}
</ul>

但是,本教程不能很好地解释此处实际发生的情况。 第一个示例很清楚, {{ question.id }}将采用问题ID的值并将其放置在url中。 但是在第二个片段中,我们使用了关键字(是否称为关键字?) url并且还使用了'detail'做些什么,虽然我怀疑它与此有关,但我不确定它的来源:

urlpatterns = [
    ...
    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name = 'detail'),
]

因此,我的问题是{% url 'detail' question.id %}什么?

您需要了解url的namespace 我试图解释。

url(r'^(?P<question_id>[0-9]+)/detail/$', views.detail, name = 'detail'),

urls您可以给urls命名,例如name = 'detail' 因此,无论何时您说{% url 'detail' %} 它生成一个URL,该URL尝试获取与名称detail关联的视图。

但是很多时候我们没有固定的URL,例如r'^page/detail/view/$'但是我们还有一些url_kwargurl variable需要传递。 在这里,我们的价值传递给变量question_id使用URL question.id

{% url 'detail' question.id %}

您可以在网址中使用名称空间

app_name = 'polls'
urlpatterns = [
    ...
    url(r'^(?P<question_id>[0-9]+)/detail/$', views.detail, name = 'detail'),
]

然后在url模板标签(称为模板标签)中,您将使用:

<a href="{% url 'polls:detail' question.id %}">
            <!-- ^^^^^^^-->

而且我认为看起来很清楚。 有关更多详细信息,您可以阅读说明标记网址

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM