当我看到这个时,有人会向我解释Django教程中究竟发生了什么吗?
{% url 'polls:detail' poll.id %}
输出到底是什么?我理解的poll.id是作为某种论点传递还是附加到url?这究竟是如何工作的?它是在调用url.py并迭代这些urls模式吗?
答案 0 :(得分:4)
{% url ... %}
template tag在您的视图(网址模式)配置中查找命名网址,并生成一个允许浏览器调用该视图的网址。
URL id后面的参数填充到url模式中;如果模式定义为:
url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
(?P<poll_id>\d+)
组是网址的第一个“参数”;标记{% url 'polls:detail' poll.id %}
采用此模式,并使用poll.id
值替换其中的第一个组。
您可以明确地为每个捕获的组命名,而不是位置参数:
{% url 'polls:detail' poll_id=poll.id %}
会达到相同的效果。
因为该教程包含了polls
网址路径下的所有polls/
网址:
url(r'^polls/', include('polls.urls')),
生成的最终URL使用当前主机名和端口加/polls/
,后跟轮询ID和另一个斜杠。如果poll.id
为1
,并且您使用http://localhost:8000/
访问了您的网站,则所有内容都汇总为:
http://localhost:8000/polls/1/
答案 1 :(得分:0)
输出将是:
/url/absolute/depending.on.urls.py
将它与“a”一起使用只需:
<a href="{% url 'polls:detail' poll.id %}">Poll {{ poll.id }}</a>