当前位置: 首页 > 工具软件 > django-wiki > 使用案例 >

django---include

柳英资
2023-12-01

 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 %}
 类似资料: