发布网友 发布时间:2024-10-22 13:12
共1个回答
热心网友 时间:2024-10-27 13:14
导读:本篇文章首席CTO笔记来给大家介绍有关django中urls冲突怎么办的相关内容,希望对大家有所帮助,一起来看看吧。
请教各位高手Django的url配置问题流线型化(streamlinling)函数导入
1:直接导入视图函数
fromdjango.conf.urls.defaultsimport*
frommysite.viewsimporthello
urlpatterns=patterns('',
(r'^hello/$',hello),
(r'^time/$',time),
)
2:导入包函模块名和函数的客串,而不是函数本身
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^hello/$','views.hello'),
(r'^time/$','views.time'),
)
3:不用导入任何视图内容,写清楚字符串描述
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^hello/$','mysite.views.hello'),
(r'^time/$','mysite.views.time'),
)
4:提取一个公共视图前缀
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('mysite.views',
(r'^hello/$','hello'),
(r'^time/$','time'),
)
5:partterns()返回对对象的相加
旧:
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('mysite.view',
(r'^hello/$','hello'),
(r'^time/$','time'),
(r'^other/$','mysite.others.other'),
)
新:
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('mysite.view',
(r'^hello/$','hello'),
(r'^time/$','time'),
)
urlpatterns+=patterns('mysite.others',
(r'^other/$','other'),
)
6:到目前为止,在所有URLconf例子中,我们使用的很简单,即“无命名”正则表达式组,在我们
想要捕获的URL部分加上小括号,django会将捕获的文本作为位置参数传递给视图函数。在更
高级的用法中,还可以使用“命名”正则表达式组来捕获URL,并且将其作为“关键字”参数传给视图。
在python正则表达式中,命名的正则表达式组的语法是(?pnamepattern),这里name是组的名字,而pattern是匹配的某个模式。
下面是一个使用无名组的URLconf的例子:
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^arcticles/(\d{4})/$',views.year_archive),
(r'^arcticles/(\d{4})/(\d{2})/$',view.moth_archive),
)
下面是相同的URLconf,使用命名组进行了重写:
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^arcticles/(?Pyear\d{4})/$',veiws.year_archive),
(r'^arcticles/(?Pyear\d{4})/(?Pmonth\d{2})/$',veiws.month_archive),
)
如果不带命名组,请求/arcticle/2006/03/将会等于这样的函数调用:
month_archive(request,'2006','03')
而带命名组,同样的请求就是这样的函数调用:
month_archive(request,year='2006',month='03')
从中可以看出,使用命名组可以让你的URLconf更加清晰,减少参数次序可能搞混潜在的Bug,
还可以让你的定义中对参数重新排序。
7:视图冗余:
#urls.py
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^(foo)/$',views.foobar_view),
(r'^(bar)/$',views.foobar_view),
)
#views.py
fromdjango.shortcutsimportrender_to_response
frommysite.modelsimportMyModel
deffoobar_view(request,url):
m_list=MyModel.objects.filter(is_new=True)
ifurl=='foo':
template_name='template1.html'
elifurl=='bar':
template_name='template2.html'
returnrender_to_response(template_name,{'m_list':m_list})
利用上面的方法可以减少视图冗余
8:为url里传入固定的参数:
#urls.py
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^foo/$',views.foobar_view,{'template_name':'template1.html'}),
(r'^bar/$',views.foobar_view,{'template_name':'template2.html'}),
)
#views.py
fromdjango.shortcutsimportrender_to_response
frommysite.modelsimportMyModel
deffoobar_view(request,template_name):
m_list=MyModel.objects.filter(is_new=True)
returnrender_to_response(template_name,{'m_list':m_list})
一些URL参数详解:
/mydata/jan/01/
/mydata/jan/02/
/mydata/jan/03/
以上为三个url我们可以用不同的方式实现
1:(r'^mydata/(/w{3})/(/d/d)',views.mydata)mydata(request,'jan','01')
2:(r'^mydata/(?Pmonth/w{3})/(?Pday/d/d)',view.mydata)mydata(request,month='jan',day='01')
3:(r'^mydata/birthday/$',views.mydata,{month:'jan',day:'01'})mydata(request,month='jan',day='01')
9:include导入:
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^weblog/',include('mysite.blog.urls')),
(r'^photos/',include('mysite.photos.urls')),
(r'^about/$','mysite.views.about'),
)
10:实例:
验证用户是否登录:
以下是三个视图
defmy_view1(request):
ifnotrequest.user.is_authenticated():
returnHttpResponseRedirect('/accounts/login/')
#...
returnrender_to_response('template1.html')
defmy_view2(request):
ifnotrequest.user.is_authenticated():
returnHttpResponseRedirect('/accounts/login/')
#...
returnrender_to_response('template2.html')
defmy_view3(request):
ifnotrequest.user.is_authenticated():
returnHttpResponseRedirect('/accounts/login/')
#...
returnrender_to_response('template3.html')
以下是对视图进行包装:
defrequires_login(view):
defnew_view(request,*args,**kwargs):
ifnotrequest.user.is_authenticated():#如果用户没有登录,跳转到登录界面
returnHttpResponseRedirect('/accounts/login/')
returnview(request,*args,**kwargs)#否则返回传进来的方法
returnnew_view#返回new_view值:登录视图或者是传进来的视图
以下为URL配置:
fromdjango.conf.urls.defaultsimport*
frommysite.viewsimportrequires_login,my_view1,my_view2,my_view3
urlpatterns=patterns('',
(r'^view1/$',requires_login(my_view1)),
(r'^view2/$',requires_login(my_view2)),
(r'^view3/$',requires_login(my_view3)),
)
请教django里url标签的遇到的问题在mysite下面有个blog的APP:
mysite的urls.py:
url(r'^$',"mysite.views.multi_color",name='home'),
url(r'^blog/',include('blog.urls')),
mysite/blog的urls.py:
url(r'^$','blog.views.home',name='blog_home'),
然后在需要渲染的模板里
navclass="navbarnavbar-inverse"role="navigation"
divclass="navbar-header"
{%loarlfromfuture%}
aclass="navbar-brand"href="{%url'home'%}"主站/a
/div
div
ulclass="navnavbar-nav"
liahref="{%url'blog_home'%}"博客/a/li
liahref="#"关于/a/li
liahref="#"联系/a/li
/ul
/div
/nav
求大佬解释python使用django配置urls出错django的版本和python的版本不一样的话,代码的写法也不一样。您发图的这段代码是书上或者别人的例子吧。建议查看对方的python版本,要跟对方的相符。再有查看django的版本,urls文件上面的#说明中有示例,可以参照一下。要跟对方代码的版本环境或者书上的环境相符。
用django时候映射完URL在打开http://localhost:8000/报这个错误,请问什么原因啊新手求帮助啊
看最后的提示:很有可能是循环引用,urls配置错误
检查一下看看是不是两个文件相互import
再看看urls里面的路径是否写的正确
结语:以上就是首席CTO笔记为大家整理的关于django中urls冲突怎么办的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~