ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python学习第121天(Django2的include使用)

2020-07-04 21:02:54  阅读:275  来源: 互联网

标签:index name views Python Django2 121 urls import path


接着昨天关于include在Django1和2中的使用区别说,昨天介绍了Django1的使用,以及Django2的基本输入,今天就接着昨天详细说一下Django2的include发放问题。

先回顾一下昨天的基本使用

# In settings/urls/main.py
from django.urls import include, path

urlpatterns = [
    path('<username>/blog/', include('foo.urls.blog')),
]

# In foo/urls/blog.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.blog.index),
    path('archive/', views.blog.archive),
]

某些前缀一致的情况

这种方法可以用来去除URLconf中的冗余,其中某个模式前缀被重复使用。例如,考虑这个URLconf:

from django.urls import path
from . import views

urlpatterns = [
    path('<page_slug>-<page_id>/history/', views.history),
    path('<page_slug>-<page_id>/edit/', views.edit),
    path('<page_slug>-<page_id>/discuss/', views.discuss),
    path('<page_slug>-<page_id>/permissions/', views.permissions),
]
我们可以改进它,通过只声明共同的路径前缀一次并将后面的部分分组:

from django.urls import include, path
from . import views

urlpatterns = [
    path('<page_slug>-<page_id>/', include([
        path('history/', views.history),
        path('edit/', views.edit),
        path('discuss/', views.discuss),
        path('permissions/', views.permissions),
    ])),
]

反向解析

from django.urls import path
from . import views

urlpatterns = [
    path('articles/<int:year>/', views.year_archive, name='archive'),
]

根据这种设计,对应于年度归档文件的URL是 /articles/<nnnn>/


你可以使用以下方法在模板代码中获取这些:
<a href="{% url 'archive' 2012 %}">2012 Archive</a>


或者在Python代码中:

from django.http import HttpResponseRedirect
from django.urls import reverse

def redirect_to_year(request):
    year = 2006
    return HttpResponseRedirect(reverse('archive', args=(year,)))

命名空间

注意:如果直接使用name做反向解析(即使用了include),也不需要设置app_name,但是使用namespace,需要设置app_name

# 1.项目的urls
from django.urls import path, include


urlpatterns = [
    path('myapp/', include('MyApp.urls', namespace='my')),
    path('yourapp/', include('YourApp.urls', namespace='you')),
]

# 2.1 MyApp.urls.py
from django.urls import path
from MyApp import views

app_name = 'myxxx'  # 在各个APP级别的urls中设置app_name

urlpatterns = [
    path('index/', views.index, name="index"),
    path('home/', views.home, name="home"),
]

# 2.2 MyApp.Views.py
from django.shortcuts import render, redirect, HttpResponse
from django.urls import reverse


def index(request):
    return HttpResponse("MyApp-index")


def home(request):
    print("home")
    return redirect(reverse('my:index'))
    # return redirect(reverse('myxxx:index'))  # 也可以使用app_name

# 3.1 YourApp.urls.py
from django.urls import path
from YourApp import views

app_name = 'yourxxx'  # 在各个APP级别的urls中设置app_name

urlpatterns = [
    path('index/', views.index, name="index"),
    path('hello/', views.hello, name="hello"),
]


# 3.2 YourApp.Views.py
from django.shortcuts import render, redirect, HttpResponse
from django.urls import reverse


def index(request):
    return HttpResponse("YourApp-index")


def hello(request):
    print("hello")
    return redirect(reverse('you:index'))
    # return redirect(reverse('yourxxx:index'))  # 也可以使用app_name

# 4. 在模板中使用
<a href="{% url 'my:index' %}">myapp-index</a>  # 可以写namespace
<a href="{% url 'yourxxx:index' %}">your-index</a>  # 可以写app_name

以上加上昨天的内容就是全部的两者之间的区别,重在吸收吧,明天再彻底复习Django的视图模板部分的内容即可恢复正常学习进度。

今天的集体学习真的是浪费时间啊。。。

标签:index,name,views,Python,Django2,121,urls,import,path
来源: https://www.cnblogs.com/xiaoyaotx/p/13236613.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有