django URL常用配置方法
2014-03-16 16:27
543 查看
1:直接导入视图函数
from
django.conf.urls.defaults import *
from
mysite.views import hello
urlpatterns
= patterns('',
(r'^hello/$',
hello),
(r'^time/$',
time),
)
2:导入包函模块名和函数的客串,而不是函数本身
from
django.conf.urls.defaults import *
from
mysite import views
urlpatterns
= patterns('',
(r'^hello/$',
'views.hello'),
(r'^time/$',
'views.time'),
)
3:不用导入任何视图内容,写清楚字符串描述
from
django.conf.urls.defaults import *
urlpatterns
= patterns('',
(r'^hello/$',
'mysite.views.hello'),
(r'^time/$',
'mysite.views.time'),
)
4:提取一个公共视图前缀
from
django.conf.urls.defaults import *
urlpatterns
= patterns('mysite.views',
(r'^hello/$',
'hello'),
(r'^time/$',
'time'),
)
5:partterns()返回对对象的相加
旧:
from
django.conf.urls.defaults import *
urlpatterns
= patterns('mysite.view',
(r'^hello/$',
'hello'),
(r'^time/$',
'time'),
(r'^other/$',
'mysite.others.other'),
)
新:
from
django.conf.urls.defaults import *
urlpatterns
= patterns('mysite.view',
(r'^hello/$',
'hello'),
(r'^time/$',
'time'),
)
urlpatterns
+= patterns('mysite.others',
(r'^other/$',
'other'),
)
6:到目前为止,在所有URLconf例子中,我们使用的很简单,即“无命名”正则表达式组,在我们
想要捕获的URL部分加上小括号,django会将捕获的文本作为位置参数传递给视图函数。在更
高级的用法中,还可以使用“命名”正则表达式组来捕获URL,并且将其作为“关键字”参数 传给视图。
在python正则表达式中,命名的正则表达式组的语法是(?p<name>pattern),这里name是组的名字,而pattern是匹配的某个模式。
下面是一个使用无名组的URLconf的例子:
from
django.conf.urls.defaults import *
from
mysite import views
urlpatterns
= patterns('',
(r'^arcticles/(\d{4})/$',views.year_archive),
(r'^arcticles/(\d{4})/(\d{2})/$',
view.moth_archive),
)
下面是相同的URLconf,使用命名组进行了重写:
from
django.conf.urls.defaults import *
from
mysite import views
urlpatterns
= patterns('',
(r'^arcticles/(?P<year>\d{4})/$',
veiws.year_archive),
(r'^arcticles/(?P<year>\d{4})/(?P<month>\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
from
django.conf.urls.defaults import *
from
mysite import views
urlpatterns
= patterns('',
(r'^(foo)/$',
views.foobar_view),
(r'^(bar)/$',
views.foobar_view),
)
#
views.py
from
django.shortcuts import render_to_response
from
mysite.models import MyModel
def
foobar_view(request, url):
m_list
= MyModel.objects.filter(is_new=True)
if
url == 'foo':
template_name
= 'template1.html'
elif
url == 'bar':
template_name
= 'template2.html'
return
render_to_response(template_name, {'m_list': m_list})
利用上面的方法可以减少视图冗余
8:为url里传入固定的参数:
#
urls.py
from
django.conf.urls.defaults import *
from
mysite import views
urlpatterns
= patterns('',
(r'^foo/$',
views.foobar_view, {'template_name': 'template1.html'}),
(r'^bar/$',
views.foobar_view, {'template_name': 'template2.html'}),
)
#
views.py
from
django.shortcuts import render_to_response
from
mysite.models import MyModel
def
foobar_view(request, template_name):
m_list
= MyModel.objects.filter(is_new=True)
return
render_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/(?P<month>/w{3})/(?P<day>/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导入:
from
django.conf.urls.defaults import *
urlpatterns
= patterns('',
(r'^weblog/',
include('mysite.blog.urls')),
(r'^photos/',
include('mysite.photos.urls')),
(r'^about/$',
'mysite.views.about'),
)
10:实例:
验证用户是否登录:
以下是三个视图
def
my_view1(request):
if
not request.user.is_authenticated():
return
HttpResponseRedirect('/accounts/login/')
#
...
return
render_to_response('template1.html')
def
my_view2(request):
if
not request.user.is_authenticated():
return
HttpResponseRedirect('/accounts/login/')
#
...
return
render_to_response('template2.html')
def
my_view3(request):
if
not request.user.is_authenticated():
return
HttpResponseRedirect('/accounts/login/')
#
...
return
render_to_response('template3.html')
以下是对视图进行包装:
def
requires_login(view):
def
new_view(request, *args, **kwargs):
if
not request.user.is_authenticated(): #如果用户没有登录,跳转到登录界面
return
HttpResponseRedirect('/accounts/login/')
return
view(request, *args, **kwargs) #否则返回传进来的方法
return
new_view #返回new_view值:登录视图或者是传进来的视图
以下为URL配置:
from
django.conf.urls.defaults import *
from
mysite.views import requires_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)),
)
from
django.conf.urls.defaults import *
from
mysite.views import hello
urlpatterns
= patterns('',
(r'^hello/$',
hello),
(r'^time/$',
time),
)
2:导入包函模块名和函数的客串,而不是函数本身
from
django.conf.urls.defaults import *
from
mysite import views
urlpatterns
= patterns('',
(r'^hello/$',
'views.hello'),
(r'^time/$',
'views.time'),
)
3:不用导入任何视图内容,写清楚字符串描述
from
django.conf.urls.defaults import *
urlpatterns
= patterns('',
(r'^hello/$',
'mysite.views.hello'),
(r'^time/$',
'mysite.views.time'),
)
4:提取一个公共视图前缀
from
django.conf.urls.defaults import *
urlpatterns
= patterns('mysite.views',
(r'^hello/$',
'hello'),
(r'^time/$',
'time'),
)
5:partterns()返回对对象的相加
旧:
from
django.conf.urls.defaults import *
urlpatterns
= patterns('mysite.view',
(r'^hello/$',
'hello'),
(r'^time/$',
'time'),
(r'^other/$',
'mysite.others.other'),
)
新:
from
django.conf.urls.defaults import *
urlpatterns
= patterns('mysite.view',
(r'^hello/$',
'hello'),
(r'^time/$',
'time'),
)
urlpatterns
+= patterns('mysite.others',
(r'^other/$',
'other'),
)
6:到目前为止,在所有URLconf例子中,我们使用的很简单,即“无命名”正则表达式组,在我们
想要捕获的URL部分加上小括号,django会将捕获的文本作为位置参数传递给视图函数。在更
高级的用法中,还可以使用“命名”正则表达式组来捕获URL,并且将其作为“关键字”参数 传给视图。
在python正则表达式中,命名的正则表达式组的语法是(?p<name>pattern),这里name是组的名字,而pattern是匹配的某个模式。
下面是一个使用无名组的URLconf的例子:
from
django.conf.urls.defaults import *
from
mysite import views
urlpatterns
= patterns('',
(r'^arcticles/(\d{4})/$',views.year_archive),
(r'^arcticles/(\d{4})/(\d{2})/$',
view.moth_archive),
)
下面是相同的URLconf,使用命名组进行了重写:
from
django.conf.urls.defaults import *
from
mysite import views
urlpatterns
= patterns('',
(r'^arcticles/(?P<year>\d{4})/$',
veiws.year_archive),
(r'^arcticles/(?P<year>\d{4})/(?P<month>\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
from
django.conf.urls.defaults import *
from
mysite import views
urlpatterns
= patterns('',
(r'^(foo)/$',
views.foobar_view),
(r'^(bar)/$',
views.foobar_view),
)
#
views.py
from
django.shortcuts import render_to_response
from
mysite.models import MyModel
def
foobar_view(request, url):
m_list
= MyModel.objects.filter(is_new=True)
if
url == 'foo':
template_name
= 'template1.html'
elif
url == 'bar':
template_name
= 'template2.html'
return
render_to_response(template_name, {'m_list': m_list})
利用上面的方法可以减少视图冗余
8:为url里传入固定的参数:
#
urls.py
from
django.conf.urls.defaults import *
from
mysite import views
urlpatterns
= patterns('',
(r'^foo/$',
views.foobar_view, {'template_name': 'template1.html'}),
(r'^bar/$',
views.foobar_view, {'template_name': 'template2.html'}),
)
#
views.py
from
django.shortcuts import render_to_response
from
mysite.models import MyModel
def
foobar_view(request, template_name):
m_list
= MyModel.objects.filter(is_new=True)
return
render_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/(?P<month>/w{3})/(?P<day>/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导入:
from
django.conf.urls.defaults import *
urlpatterns
= patterns('',
(r'^weblog/',
include('mysite.blog.urls')),
(r'^photos/',
include('mysite.photos.urls')),
(r'^about/$',
'mysite.views.about'),
)
10:实例:
验证用户是否登录:
以下是三个视图
def
my_view1(request):
if
not request.user.is_authenticated():
return
HttpResponseRedirect('/accounts/login/')
#
...
return
render_to_response('template1.html')
def
my_view2(request):
if
not request.user.is_authenticated():
return
HttpResponseRedirect('/accounts/login/')
#
...
return
render_to_response('template2.html')
def
my_view3(request):
if
not request.user.is_authenticated():
return
HttpResponseRedirect('/accounts/login/')
#
...
return
render_to_response('template3.html')
以下是对视图进行包装:
def
requires_login(view):
def
new_view(request, *args, **kwargs):
if
not request.user.is_authenticated(): #如果用户没有登录,跳转到登录界面
return
HttpResponseRedirect('/accounts/login/')
return
view(request, *args, **kwargs) #否则返回传进来的方法
return
new_view #返回new_view值:登录视图或者是传进来的视图
以下为URL配置:
from
django.conf.urls.defaults import *
from
mysite.views import requires_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 URL常用配置方法
- Django url 配置的三种方法
- django中url与view配置方法
- Django-两种安装xadmin的方法及主要配置方法和常用字段类型
- 关于 Django 的 URL 配置与 get_absolute_url 方法
- django配置url的方法
- Django学习:URL配置方法(3)
- Django项目中包含多个应用时对url的配置方法
- chrome常用配置url以及 升级后卡死解决方法
- django学习——django中三种配置url的方法
- [django]入门教程2:视图开发-定义视图函数及配置相应URL
- django之url配置
- 配置NGINX支持中文URL 中文文件名称或文件夹404无法訪问的解决方法
- django 视图开发与url配置
- SpringMVC,3种不同的URL路由配置方法(这根本不是一个小问题)(转)
- ASP.NET以及JS获取URL和IP地址的常用方法
- Django model 常用方法记录
- Crusher Django 学习笔记2 基本url配置
- Django通过URL传递参数的4种方法