django中命名用法笔记

url命名:

为何须要url命名?

由于url是常常变化的。若是在代码中写死可能会常常改代码。给url取个名字,之后使用url的时候就使用他的名字进行反转就能够了,就不须要写死url了。python

如何给一个url指定名称?

path函数中,传递一个name参数就能够指定。示例代码以下:app

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

应用命名空间:

在多个app之间,有可能产生同名的url。这时候为了不反转url的时候产生混淆,能够使用应用命名空间,来作区分。定义应用命名空间很是简单,只要在appurls.py中定义一个叫作app_name的变量,来指定这个应用的命名空间便可。示例代码以下:函数

# 应用命名空间
app_name = 'front'

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

之后在作反转的时候就能够使用应用命名空间:url名称的方式进行反转。示例代码以下:url

login_url = reverse('front:login')

应用(app)命名空间和实例命名空间:

一个app,能够建立多个实例。能够使用多个url映射同一个app。因此这就会产生一个问题。之后在作反转的时候,若是使用应用命名空间,那么就会发生混淆。为了不这个问题。咱们能够使用实例命名空间。实例命名空间也是很是简单,只要在include函数中传递一个namespace变量便可。示例代码以下:spa

urlpatterns = [
    path('',include('front.urls')),
    # 同一个app下有两个实例
    path('cms1/',include('cms.urls',namespace='cms1')),
    path('cms2/',include('cms.urls',namespace='cms2')),
]

之后在作反转的时候,就能够根据实例命名空间来指定具体的url。示例代码以下:code

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))
相关文章
相关标签/搜索