URL配置
http://www.cnblogs.com/haiyan123/p/7701412.html
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
1、一旦匹配成功则不再继续
2、若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
3、不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
4、每个正则表达式前面的’r’ 是可选的但是建议加上。
有名分组和无名分组
from app02 import views
from django.conf.urls import url
urlpatterns = [
#无名分组
url(r'^article/\d{4}', views.year) ,
url(r'^article/(\d{4})$', views.year2),
如果有多个匹配一样的时候,谁放在上面就匹配谁,上面的就会把下面的覆盖了
正则加上括号,就是分组,会把分组的内容作为year2函数的参数传进去
url(r'^article/(\d{4})/(\d{2})$', views.year_month),
# 有名分组(就是给分组起个名字,这样定义的好处就是按照关键字参数去传参了,指名道姓的方式)
url(r'^article/(?P<year>\d{4})/(?P<month>\d{2})$', views.year_month_hasname)
]
捕获的值作为关键字参数而不是位置参数传递给视图函数。例如:
/articles/2005/03/
请求将调用views.month_archive(request, year='2005', month='03')函数
name别名
urls配置文件中
url(r"register",views.register,name="reg"),
前端页面中
{% load staticfiles %}
<form action="{% url 'reg' %}" method="post">
...
</form>
include分发
外层urls
from django.contrib import admin
from django.urls import path
from blog import views
from django.conf.urls import url,include
urlpatterns = [
path('admin/', admin.site.urls),
path(r'show_time/',views.show_time),
url(r'blog/', include('blog.urls')),
]
app内的urls
from django.conf.urls import url,include
from django.contrib import admin
from blog import views
urlpatterns = [
url(r'article/(\d{4})$',views.article_year),
url(r'article/(?P<year>\d{4})/(?P<month>\d{2})',views.article_year_month),
url(r'article/(?P<year>\d{4})/(?P<month>\d{2})/\d+',views.article_year_month),
url(r"register",views.register,name="reg"),
]
浏览器新地址
http://127.0.0.1:8080/blog/register