Django模板标签中url使用详解(url跳转到指定页面)
django{%url%}模板标签使用
inclusions/_archives.html
... {%fordateindate_list%}
这里{%url%}这个模板标签的作用是解析视图函数blog:archive对应的URL模式,并把URL模式中的年和月替换成date.year,date.month的值。
{%url%}模板标签接收的第一个参数为被解析视图函数的端点值,这个端点值由2部分组成,中间由冒号分隔。第一部分为在应用的urls.py中指定的app_name的值(充当命名空间,这样即使不同app下有相同的视图函数名,也不会冲突),第二部分path函数中传入的name参数的值。比如在blog应用的urls.py模块,我们指定了app_name='blog',archive视图函数的url模式为path('archives/
{%url%}模板标签接收的其它参数为URL路径参数,即URL模式中路径参数转换器需要捕获的值。例如archive视图函数对应的URL模式为archives/
为什么要使用{%url%}模板标签呢?事实上,我们把超链接的href属性设置为/archives/{{date.year}}/{{date.month}}/同样可以达到目的,但是这种写法是硬编码的。虽然现在blog:archive视图函数对应的URL模式是这种形式,但是如果哪天这个模式改变了呢?如果使用了硬编码的写法,那你需要把每一处/archives/{{date.year}}/{{date.month}}/修改为新的模式。但如果使用了{%url%}模板标签,则不用做任何修改。
示例
1、主urls.py文件配置如下:
fromdjango.urlsimportpath fromdjango.conf.urlsimportinclude frommyblogimportviews urlpatterns=[ path('',views.index), path('myblog/',include('myblog.urls')), ]
2、APP的urls.py文件配置如下:
fromdjango.urlsimportpath frommyblogimportviews urlpatterns=[ path('',views.index), path('login/',views.login,name='login'),#这里设置name,为了在模板文件中,写name,就能找到这个路由 path('book/',views.book,name='book'), path('movie/',views.movie,name='movie'), path('book/detail// /',views.book_detail,name='detail'), ]
3、APP的views.py文件如下:
fromdistutils.commandimportregister fromdjango.shortcutsimportrender,reverse,redirect fromdjango.httpimportHttpResponse defindex(request): returnrender(request,'index.html',{'articles':18}) deflogin(request): returnHttpResponse("注册页面") defbook(request): returnHttpResponse("读书页面") defmovie(request): returnHttpResponse("电影页面") defbook_detail(request,book_id,catgray): text='文章详情页,该文章ID是:%s,分类是:%s'%(book_id,catgray) returnHttpResponse(text)
4、index.html文件如下:
Title
首页 - #点读书就会调到,读书页,路径
登录 - #在这里,直接写name,就能找到urls文件中对应的路由
读书 读书 电影 最火的一篇文章