版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43908900/article/details/94892086
Django
中的url
与视图详解(2)因为url
是经常变化的。如果在代码中写死可能会经常改代码。给url
取个名字,以后使用url
的时候就使用他的名字进行反转就可以了,就不需要写死url
了。
在path中指定一个name参数就可以完成操作:
urlpatterns = [
path('',views.index,name='index'),
path('login/',views.login,name='login')
]
在多个APP
中会出现相同的url
,因为在现实环境中,一个项目不能是一个人完成的,为了避免在反转的时候出现混淆,我们需要在APP
中指定应用命名,例如:
# 应用命名空间
app_name = 'front'
urlpatterns = [
path('',views.index,name='index'),
path('login/',views.login,name='login')
]
以后做反转的之后可以使用格式==>应用命名空间:url
名称的方式;
login_url = reverse('front:login')
一个app
,可以创建多个实例。可以使用多个url
映射同一个app
。所以这就会产生一个问题。以后在做反转的时候,如果使用应用命名空间,那么就会发生混淆。为了避免这个问题。我们可以使用实例命名空间。实例命名空间也是非常简单,只要在``include函数中传递一个
namespace`变量即可:
urlpatterns = [
path('',include('front.urls')),
# 同一个app下有两个实例
path('cms1/',include('cms.urls',namespace='cms1')),
path('cms2/',include('cms.urls',namespace='cms2')),
]
根据实例命名空间指定具体的Url
:
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))
应用命名空间与实例命名空间,根据相关的代码理解两者的差异,这样方便自己的记忆。
注意点:写正则表达式是使用标志性的原生字符串·“r”
开头,在正则表达式中定义变量,需要使用圆括号括起来。这个参数是有名字的,那么需要使用?P<参数的名字>
。然后在后面添加正则表达式的规则。
#例子:
# 正则以^list/尖号后面内容开始,然后使用(),里面包含正则法则,(?p<命名>)定位名字,\d{4}=>四个数字,“/$”结束
re_path(r'^list/(?P<year>\d{4})/$',views.acticle_List),
如果不是必须的需求,尽量使用path,这样不会造成代码的冗余,更简洁。
鸡汤:学习不是三分钟的热血,而是一辈子所为之努力的,加油吧,骚年!