django过滤器-----url

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 的参数.

另外一种语法.

{% 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' %}


myapp是我们的名字空间, view-name是我们的名字空间的名字.

在配置URLconf的时候, 定义一个名字空间:

url(r'^myapp/', include('myapp.urls', namespace="myapp")),


在我们的myapp里的views
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>


这里解释一下上面的代码, myapp是名字空间, detail是URLconf的名字, item.pk是默认取我们的自动ID, pk是一个django里的默认名字.

构造的url为:

/myapp/1







发布了44 篇原创文章 · 获赞 3 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qiya2007/article/details/38083213