1. namespace与name的区别
# app01 namespace
from django.conf.urls import url, include
from app01 import views
urlpatterns = [
# app01
url(r'^app01/', include('app01.urls', namespace='app01')), # app01:register 反向解析时候加上 app:
]
# 路由分发 name
from django.conf.urls import urlfrom web.views import account
url(r'^register/$', account.register, name='register'),
2. include的使用方式
# include 一共两种用法
from django.conf.urls import url, include
# 第一种(常用的方法)
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('web.urls')),
]
# 第二种(include后面跟[])
坑1 未添加反斜杠,.....导致路由重叠 href="/manage/1dashboard.html/
url(r'^manage/(?P<project_id>\d+)/', include([
url(r'^wiki.html/', manages.wiki, name='wiki'),
], None, None)),
3. 案例
3.1 中间件补充
- return None 跳出当前process_request/process_view,交给下一个中间件处理
- return Response对象(HttpResponse/redirect...) 直接返回
# 1.url.py
from django.conf.urls import url, include
# 项目
url(r'^manage/(?P<project_id>\d+)/', include([
url(r'^dashboard/$', manage.dashboard, name='dashboard'),
url(r'^issues/$', manage.issues, name='issues'),
url(r'^statistics/$', manage.statistics, name='statistics'),
url(r'^file/$', manage.file, name='file'),
url(r'^wiki/$', manage.wiki, name='wiki'),
url(r'^setting/$', manage.setting, name='setting'),
], None, None)),
# 2.中间件
def process_view(self, request, view, args, kwargs): # 案例 在manage.html里面展示菜单,想要的效果,未进入,不展示,进入,展示,在同一个地方展示
# 捕获以manage开头的项目的url,目的去使,未进入manage的视图可以使用项目的id,因为没有进去,无法获得项目id,
# 是否以manage开头的 如果是则判断是否自己的项目,接着判断是我参与的项目还是我创建的
if not request.path_info.startswith('/manage/'):
return # return 代表不处理
# 获取项目的id url那里的
project_id = kwargs.get('project_id')
# 我创建的
project_obj = models.Project.objects.filter(creator=request.tracer.user, id=project_id).first()
if project_obj:
request.tracer.project = project_obj
return
project_user_obj = models.ProjectUser.objects.filter(user=request.tracer.user, project_id=project_id).first()
if project_user_obj:
request.tracer.project = project_user_obj.project
return
return redirect('project_list')
# 3.前端反向解析使用
{% if request.tracer.project %}
{% manage_menu_list request %}
{% endif %}