前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django中的url与视图详解(2)

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

作者头像
xbhog
发布2019-09-08 14:32:46
1.1K0
发布2019-09-08 14:32:46
举报
文章被收录于专栏:开发技能乱炖开发技能乱炖

版权声明:本文为博主原创文章,遵循 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,这样不会造成代码的冗余,更简洁。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django中的url与视图详解(2)
    • url命名:
      • url指定名称:
      • 应用命名空间:
      • 实例命名空间:
    • re_path相关操作:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档