2024-09-16 00:07:04
导读:今天首席CTO笔记来给各位分享关于django2.0.13如何配置url的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
django的url配置求教为什么无法includefromdjango.conf.urlsimportpatterns,include,url
fromviewsimport*
urlpatterns=patterns(
url(r'^hello/$',hello),
)
第二个url写法是有问题的,导入模块写法应该是fromapp.viewsimporthello这个格式,在django中,都应该这种导入方法。
另入,像第二个,我平时是这么写的:
url(r'^hello/$','app.viwes.hello`),
多看下djangobook里面的url写法。
请教各位高手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的配置在Django中经常需要配置图片、视频等表态文件,在配置时较为复杂,这里纪录一下:
在文件尾部加入以下目录,用于存放上传的文件
在models中写上image字段其中%Y代表年,%m代表月,blank=True代表可以为空。当上传文件时,代表上传到image目录下,以当前年月子目录的文件夹中。
image=models.ImageField(upload_to="image/%Y/%m",blank=True)
其中src中的{{MEDIA_URL}}会在模板中渲染为第一步中的/media/
如果您想在模板中使用{{MEDIA_URL}},请在“模板”的“context_processors”选项中添加django.template.context_processors.media。
通过以上步骤,基本上可以在前端正常渲染出结果了,但还需要给图片添加一个URL以正常显示。
第一行为引入静态文件的serve,第二行为导入工程配置文件中的MEDIA_ROOT
在url中加入:
Django中关于URL配置文件urls.py的理解1.什么是urls.py
2.?urls.py文件位置
3.?urls.py配置格式
urlpatterns=patterns('视图前缀',
??url(r'^正则表达式1/$','视图函数1',name="url标识1"),
??url(r'^正则表达式2/$','视图函数2',name="url标识2"),
)
4.?urls.py如何工作
怎样设置django默认的url你是说域名吗?一般是在nginx的前端代理和django的allow_hosts里面配置
结语:以上就是首席CTO笔记为大家整理的关于django2.0.13如何配置url的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~