首页
学习
活动
专区
圈层
工具
发布

Django中的url与视图详解(2)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_43908900/article/details/94892086

Django中的url与视图详解(2)

url命名:

因为url是经常变化的。如果在代码中写死可能会经常改代码。给url取个名字,以后使用url的时候就使用他的名字进行反转就可以了,就不需要写死url了。

url指定名称:

在path中指定一个name参数就可以完成操作:

代码语言:javascript
复制
urlpatterns = [
    path('',views.index,name='index'),
    path('login/',views.login,name='login')
]

应用命名空间:

在多个APP中会出现相同的url,因为在现实环境中,一个项目不能是一个人完成的,为了避免在反转的时候出现混淆,我们需要在APP中指定应用命名,例如:

代码语言:javascript
复制
# 应用命名空间
app_name = 'front'

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

以后做反转的之后可以使用格式==>应用命名空间:url名称的方式;

代码语言:javascript
复制
login_url = reverse('front:login')

实例命名空间:

一个app,可以创建多个实例。可以使用多个url映射同一个app。所以这就会产生一个问题。以后在做反转的时候,如果使用应用命名空间,那么就会发生混淆。为了避免这个问题。我们可以使用实例命名空间。实例命名空间也是非常简单,只要在``include函数中传递一个namespace`变量即可:

代码语言:javascript
复制
urlpatterns = [
    path('',include('front.urls')),
    # 同一个app下有两个实例
    path('cms1/',include('cms.urls',namespace='cms1')),
    path('cms2/',include('cms.urls',namespace='cms2')),
]

根据实例命名空间指定具体的Url:

代码语言:javascript
复制
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))

应用命名空间与实例命名空间,根据相关的代码理解两者的差异,这样方便自己的记忆。

re_path相关操作:

注意点:写正则表达式是使用标志性的原生字符串·“r”开头,在正则表达式中定义变量,需要使用圆括号括起来。这个参数是有名字的,那么需要使用?P<参数的名字>。然后在后面添加正则表达式的规则。

代码语言:javascript
复制
#例子:
# 正则以^list/尖号后面内容开始,然后使用(),里面包含正则法则,(?p<命名>)定位名字,\d{4}=>四个数字,“/$”结束
    re_path(r'^list/(?P<year>\d{4})/$',views.acticle_List),

如果不是必须的需求,尽量使用path,这样不会造成代码的冗余,更简洁。

鸡汤:学习不是三分钟的热血,而是一辈子所为之努力的,加油吧,骚年!

下一篇
举报
领券