2024-12-02 02:37:06
导读:很多朋友问到关于django如何跳转地址的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
请教各位高手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模版,模版上的链接,点击后打开ftp的地址。如何实现?
FTP上传模板这个问题,虽有点不太明你具体疑问!如果,只是想把本地模板上传到主机空间已安装好的如WP、DEDE类的程序里去,直接把文件全选上传到空间程序对应的文件夹去,如Wordpress还可以在后台控制面板添加主题里上传上去!
求助,关于Django跳转后css路径问题应该是给后面大层的背景图,因为有float:left;所以在下面一个层一定要清楚浮动。
最好能有测试地址,因为有不同的原因都会导致上面的错误。
django本地重定向外网相对简单,利用HTTP_REFERER,Django的注销页面这样写就行:
deflogout_user(request):
logout(request)
returnHttpResponseRedirect(request.META.get('HTTP_REFERER','/'))
登录操作:
登陆操作相对复杂,因为一般都有单独的登陆页面,如果登陆成功再取HTTP_REFERER就是登陆页面自己的url,而不是之前的那个页面。
django跳转到登陆前的意向页面我理解你其实想要保存用户先前访问的页面是吧?
如果是这样,你根本无须写那么一大堆,Django的request.path里就封装了原来的页面地址url,直接使用就可以了!这就是Django的贴心之处。
去刘江的DJango教程看看把,免费的,而且项目实战很精彩。
Django写的LoginView,登录成功后无法跳转回原页面,求助Youdonotneedtomakeanextraviewforthis,thefunctionalityisalreadybuiltin.
Firsteachpagewithaloginlinkneedstoknowthecurrentpath,andtheeasiestwayistoaddtherequestcontextpreprosessortosettings.py(the4firstaredefault),thentherequestobjectwillbeavailableineachrequest:
settings.py:
TEMPLATE_CONTEXT_PROCESSORS=(
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.request",
)
ThenaddinthetemplateyouwanttheLoginlink:
base.html:
ahref="{%urldjango.contrib.auth.views.login%}?next={{request.path}}"Login/a
ThiswilladdaGETargumenttotheloginpagethatpointsbacktothecurrentpage.
Thelogintemplatecanthenbeassimpleasthis:
registration/login.html:
{%blockcontent%}
formmethod="post"action=""
{{form.as_p}}
inputtype="submit"value="Login"
/form
{%endblock%}
结语:以上就是首席CTO笔记为大家介绍的关于django如何跳转地址的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。