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文件中对应的路由
读书 读书 电影 最火的一篇文章