您的位置:首页 > 编程语言 > Go语言

Django笔记-URLConf Views

2009-10-23 19:04 381 查看
常用正则     

   ^匹配输入字符的开始位置;$匹配输入字符的结束位置;+匹配前面的字符一次或多次

匹配根目录用:

   ('^$', my_homepage_view),

一、库文件导入问题

1. from django.conf.urls import patterns,url

from website.contact.views import contact, thanks

这种方法导入不好,因为随着views数量的增多,在每次加入新的view函数时还得确认是否已经导入了这个函数。如果项目非常大 则管理起来非常困难。另外导入语句过长也影响了代码的美观程度。

urlpatterns = patterns('',

 (r'^contact/$', contact),

 (r'^thanks/$', thanks),

 )

2. 一种不需要导入函数的更好的写法

urlpatterns = patterns('website.contact.views',

 (r'^contact/$', 'contact'),

 (r'^thanks/$', 'thanks'),

 )

这种写法不需要导入view函数,django会自动导入需要的视图函数,但是这里组要必须用字符串'contact’,而不是函数

if xxx:在这里加上条件判断还可以有选择的将app加入到web中。例如:

if settings.DEBUG:

    urlpatterns += patterns('',

        (r'^debuginfo/$', views.debug),

    )

3. 不要用 import *

* 表示,该模块的所有公共对象(public objects)都被导入到 当前的名称空间,也就是任何只要不是以”_”开始的东西都会被导入,views里面所有的代码,包括import的东西都会import的,所以这个方法是绝对不能用的。

二、给views函数传递参数 两种方法

1.位置参数

URLconf parameter可以起名字,也可以用位置参数传递给views函数。这里的正则表达式没有啥特殊的,需要传递的参数用小括号括起来。下面的例子匹配的是website/day/+2位数的数字

(r'^day/(\d{1,2})$', index),

写view函数时只需要取第二个参数即可(第一个是系统默认的)

 

def index(request, parameter_day):

    try:

        day = int(parameter_day)

    except ValueError:

        raise Http404()

    return HttpResponse(day)

3.关键字参数

如下所述bar_view同foo_view处理内容是相同的,只是模板不同而已,下面例子中变量不用放在网址中即可显示不同的参数。即网址r'^foo/$'的变动不会影响处理。该方法在某些方面用起来非常方便,最好的例子应该是generic views system的应用了。

# urls.py

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

def foobar_view(request, template_name):

    ...

3.字典参数传递的变量比正则表达式变量优先级高

urlpatterns = patterns('',

    (r'^mydata/(?P<id>/d+)/$', views.my_view, {'id': 3}),

)

虽然请求url中值为22 ,http://127.0.0.1/mydata/22 但是传递的ID参数为3

三、包含其他URLConfs

1.include函数

用include的正则表达式,不能包含$来表示结尾,另外结尾必须有/

 

2.参数传递

如果被包含的urls接受了一个参数,那么他会传递给任意一个include里面的views函数。同样 Extra URLconf Options 也会传递下层被包含的每一个url中。例子:下面的两个是等同的

# urls.py

urlpatterns = patterns('',

    (r'^blog/', include('inner'), {'blogid': 3}),

)

# inner.py

urlpatterns = patterns('',

    (r'^archive/$', 'mysite.views.archive'),

    (r'^about/$', 'mysite.views.about'),

    (r'^rss/$', 'mysite.views.rss'),

)

# urls.py

urlpatterns = patterns('',

    (r'^blog/', include('inner')),

)

# inner.py

urlpatterns = patterns('',

    (r'^archive/$', 'mysite.views.archive', {'blogid': 3}),

    (r'^about/$', 'mysite.views.about', {'blogid': 3}),

    (r'^rss/$', 'mysite.views.rss', {'blogid': 3}),

)

<本节完>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息