一个app,可以创建多个实例。即可以使用多个url映射同一个app。所以这就会产生一个问题。以后在做反转的时候,如果使用应用命名空间,那么就会发生混淆。为了避免这个问题。我们可以使用实例命名空间。实例命名空间也是非常简单,只要在include
函数中传递一个namespace
变量即可。
示例:
在主urls.py中对cms添加两个映射,然后实例化命名
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('front.urls')),
path('cms1/',include('cms.urls',namespace='cms1')),
path('cms2/',include('cms.urls',namespace='cms2')),
然后我们也修改一下cms的views.py中index函数的代码,没有传入用户名进来时直接跳转至登录页面。
from django.shortcuts import reverse,redirect
def index(request):
username = request.GET.get("username")
if username:
return HttpResponse('CMS首页')
else:
current_namespace = request.resolver_match.namespace
return redirect(reverse("%s:login" % current_namespace))
这样我们就使用cms1进入时,就会进入cms1的登录页面,使用cms2进入,就会进入cms2的登录页面。就不会产生混淆了。
url命名为什么需要给url命名?因为url是经常变化的。如果在代码中写死可能会经常改代码。给url取个名字,以后使用url的时候就使用他的名字进行反转就可以了,就不需要写死url了。示例:在项目中新建一个front的app,views.py中写入一下代码:from django.shortcuts import renderfrom django.http import HttpRe...
首先明确几个概念:
1.在html页面上的内容特别是向用户展示的url地址,比如常见的超链接,图片链接等,最好能动态生成,而不要固定.
2.一个django项目中一般包含了多个django应用(app).
3.一个视图(view)往往对应多个url地址.
在django中实现反向解析URL必备条件就是 url和view能一对一 的匹配.
(通过view找到唯一一个对应的url,通过url也能找到唯一一个view)
最 简单的方式 就是使用 name ,可以理解为url起了一个名字.
from django
1. 路由定义位置
Django的主要路由信息定义在工程同名目录下的urls.py文件中,该文件是Django解析路由的入口,也叫总路由.
每个子应用为了保持相对独立,可以在各个子应用中定义属于自己的urls.py来保存该应用的路由,也叫子路由。然后用主路由文件包含各应用的子路由数据。
除了上述方式外,也可将工程的全部路由信息都定义在主路由文件中,子应用不再设置urls.py。如:
from django.conf.urls import url
from django.contrib impo
命名空间(namespace):用来表示标识符的作用范围
一个标识符可以在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突。
应用场景:
当一个项目中包含多个app,每个app中都有命名相同的标识符时,为了能够使每次访问都能得到想要的结果(访问指定变量),就需要使用namespace。
1、创建...
urlpatterns = patterns('',
url(r'^archive/(\d{4})/$', archive),
url(r'^archive-summary/(\d{4})/$', archive, {'summary': True}),
这是可行的,当对于我上一篇记录的Django之逆向解析url
urlpatterns = [
# !!!重要,url命名空间的反向解析,可用于因路径变更或者名字变更,不需要变路径。
re_path(r'^two/', include(('Two.urls','Two'),namespace='second')),
因django版本问题,可能会报如下错
Specifying a namespace in include() without pr
文章目录1.路由函数:path(),re_path()函数URL转换器(convert)2.URL模块化3.URL向视图函数传参向视图函数传参的两种方法URL映射时指定默认参数4.URL命名5.不同条件下URL的跳转6.应用命名空间7.实例命名空间8.`include()`函数补充9.`reverse()`函数补充
1.路由函数:path(),re_path()函数
re_path()与pa...
应用命名空间/实例命名空间指定url名称应用命名空间:应用命名空间与实例命名空间:
因为url经常变化。如果在代码中写死可能会经常改代码。给url取个名字,以后使用url的时候就使用他的名字进行反转就可以了
指定url名称
在path函数中,传递一个name参数就可以指定
urlpatterns = [
path('',views.index,name='index'),
path('login/',views.login,name='login')
应用命名空间:
在多个app之间,
一、为什么需要url命名?
因为url是经常变化的。如果在代码中写死可能会经常改代码。给url取个名字,以后使用url的时候就使用他的名字进行反转就可以了,就不需要写死url了。
需求:访问app主页,如果没登录则自动跳转至登录页面,已经登录则留在app主页。
项目下创建两个app:
django-admin startapp app01
djang...