django的内置功能非常强大, 但是由于功能太强大了, 所以各种预定义的名字会出现在咱们的面前, 然我们疑惑.
下面讲的一个过滤器 url.
看名字就知道, 这个函数是用来生成一个合法url的. 格式如下:
{% url 'path.to.some_view' v1 v2 %}
官方说明是: This is a way to output links without violating the DRY principle by having to hard-code URLs in your templates.
第一个参数是我们的对应app下面的视图函数, 格式是:
package.package.module.function
另外一种语法.
{% url 'path.to.some_view' arg1=v1 arg2=v2 %}
{% url 'path.to.view' arg arg2 as the_url %}
<a href="{{ the_url }}">I'm linking to {{ the_url }}</a>
但是着这种方式, 当我们的view出现错误的时候, 是不会报错的, 如果要检测这种情况, 那么就要在加一步检测:
{% url 'path.to.view' as the_url %}
{% if the_url %}
<a href="{{ the_url }}">Link to optional stuff</a>
{% endif %}
还有一个语法糖, 我们可以利用一个自定义的名字空间. 这样简化代码, 语法如下:
{% url 'myapp:view-name' %}
在配置URLconf的时候, 定义一个名字空间:
url(r'^myapp/', include('myapp.urls', namespace="myapp")),
url(r'^(?P<pk>\d+)/$', views.MyView.as_view(), name="detail"),
上面的MyView是django的通用视图.
<li>
<a href = "{% url 'myapp:detail' pk=item.pk %}"> {{ item.name }}</a>
</li>
构造的url为:
/myapp/1