项目路由配置文件包括:配置目录里的urls.py文件和各个app目录里的urls.py文件
1、include()——从项目主路由分配到各APP主路由
from django.conf.urls import include,url
urlpatterns = [
url(r'^home_student', include('home_student.urls')),
]
2、url的name属性——解耦
(1)name属性定义:urls.py文件的urlpatterns中
url(r
'^add/(d+)/(d+)/$'
, calc_views.add2, name
=
'add2'
),
(2)name属性在.py文件中的使用:
python manage.py shell
>>>
from
django.core.urlresolvers
import
reverse
# django 1.4.x - django 1.10.x
>>>
from
django.urls
import
reverse
# django 1.10.x 新的,更加规范了
#reserve函数用于从name获取url:reverse(url的name, args=(url所需的参数))
>>> reverse(
'add2'
, args
=
(
4
,
5
))
u
'/add/4/5/'
>>> reverse(
'add2'
, args
=
(
444
,
555
))
u
'/add/444/555/'
(3)name属性在.html文件中替代url
不带参数的:
{% url 'name' %}
带参数的:参数可以是变量名
{% url 'name' 参数 %}
例如:
<
a
href
=
"{% url 'add2' 4 5 %}"
>link</
a
>
示例!!!比如用户收藏夹中收藏的URL是旧的,如何让以前的 /add/3/4/自动跳转到现在新的网址呢?
要知道Django不会帮你做这个,这个需要自己来写一个跳转方法:
具体思路是,
在 views.py 写一个跳转的函数:
from
django.http
import
HttpResponseRedirect
from
django.core.urlresolvers
import
reverse
# django 1.4.x - django 1.10.x
# from django.urls import reverse # new in django 1.10.x
def
old_add2_redirect(request, a, b):
return
HttpResponseRedirect(
reverse(
'add2'
, args
=
(a, b))
)
然后将原来的url指向这个跳转函数,而跳转函数跳转到新url
url(r
'^add/(d+)/(d+)/$'
, calc_views.old_add2_redirect),
url(r
'^new_add/(d+)/(d+)/$'
, calc_views.add2, name
=
'add2'
),
3、在html文件或者view文件中调用url的方法:
项目主页为:
<a href="./">首页</a>
其他页面依此类推
参考:http://code.ziqiangxuetang.com/django