python-django web开发实战记实录(一)

好吧,首先记录一下为什么要写这一辑文章,因为我现在正在用python和django开发web网站,与此同时,我也会遇到一系列问题,也会总结一系列心得,所以我要把他记录下来,这样作为一种增加记忆,方便日后翻看查阅,以及帮助遇到同样问题的人。



Q1:urlpatterns配置

1. 在setting.py里面设置ROOT_URLCONF=指定的url模块名称,django据此装载URLconf,然后按顺序逐个匹配

2. 

from django.conf.urls.defaults import *
from mysite.views import current_datetime
urlpatterns = patterns('',
(r'^time/$', current_datetime),
)
这里,time/ 前面 不需要加斜杠/ ,因为django会自动在每个表达式前添加一个斜杠,因为URLconfs可能由其他URLconfs所引用,所以不加斜杠会让事情变得简单一些

current_datetime是函数对象,需要import,也可以直接使用函数的完整路径字符串代替,这样就不需要import

3.带通配符的漂亮的URL匹配模式

from django.conf.urls.defaults import *
from mysite.views import current_datetime, hours_ahead
urlpatterns = patterns('',
(r'^time/$', current_datetime),
(r'^time/plus/\d+/$', hours_ahead),
)
在view中就可以这么写:

def hours_ahead(request, offset):
    offset = int(offset)
    dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
    html = "In %s hour(s), it will be %s." % (offset, dt)
    return HttpResponse(html)
offset是从匹配的URL中提取出来的,


4. patterns函数的第一个参数,是该函数包含的视图函数的前缀

urlpatterns = patterns('',
    (r'^now/$', 'mysite.views.current_datetime'),
    (r'^now/plus(\d{1,2})hours/$', 'mysite.views.hours_ahead'),
(r'^now/minus(\d{1,2})hours/$', 'mysite.views.hours_behind'),
)

可以改写成:

urlpatterns = patterns('mysite.views',
    (r'^now/$', 'current_datetime'),
    (r'^now/plus(\d{1,2})hours/$', 'hours_ahead'),
)

5. url中的命名组(?Ppattern)

urlpatterns = patterns('',
    (r'articles/(?P\d{4})/$', views.year_archive),
    (r'articles/(?P\d{4})/(?P\d{2})/$', views.month_archive),
)

如果在URLconf中使用命名组,那么命名组和非命名组是不能同时存在于同一个URLconf的模式中的


6. 传递额外的参数到视图中去:

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})


7. 包含其他URLconf
urlpatterns = patterns('',
(r'^weblog/', include('mysite.blog.urls')),
(r'^photos/', include('mysite.photos.urls')),
(r'âbout/$', 'mysite.views.about'),
)
指向 include() 的正则表达式并 不 包含一个 $ (字符串结尾匹配符),但是包含了一个斜杆。每当Django遇到 include() 时,它将截断匹配的URL,并把剩余的字符串发往包含的URLconf作进一步处理

你可能感兴趣的:(python)