经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
对Django url的几种使用方式详解
来源:jb51  时间:2019/8/7 8:32:09  对本文有异议

利用Django开发网站,可以设计出非常优美的url规则,如果url的匹配规则(包含正则表达式)组织得比较好,view的结构就会比较清晰,比较容易维护。

最简单的形式

  1. <code>
  2. from django.conf.urls import patterns, url
  3. urlpatterns = patterns('',
  4. url(r'^articles/2003/$', 'news.views.special_case_2003'),
  5. url(r'^articles/(\d{4})/$', 'news.views.year_archive'),
  6. url(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),
  7. url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
  8. )</code>

其中,正则表达式中组匹配出来的结果可以作为positional parameters传递给view.

如果url是www.yourdomain/articles/2005/,则会匹配第二条规则,执行news.views.year_archive('2005').

注意点

域名部分会被过滤掉

articles的前面不需要添加/,因为前序url的末尾一定会有/

任何组匹配的变量,都会议字符串的形式传递给view, 虽然通过(\d{4})匹配出了2005,但2005任然会被当做字符串传递给year_archive

利用named group来传递参数

可以通过以下形式为特定的组指定一个名称.

  1. urlpatterns = patterns('',
  2. url(r'^articles/2003/$', 'news.views.special_case_2003'),
  3. url(r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive'),
  4. url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.month_archive'),
  5. url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$', 'news.views.article_detail'),
  6. )

这样的话,组的匹配结果会通过keyword parameters的形式传递给view.例如year_archive(year='2005')

利用named group可以为view指定一个默认参数来匹配多条规则。

  1. # URLconf
  2. from django.conf.urls import patterns, url
  3. urlpatterns = patterns('',
  4. url(r'^blog/$', 'blog.views.page'),
  5. url(r'^blog/page(?P<num>\d+)/$', 'blog.views.page'),
  6. )
  7. # View (in blog/views.py)
  8. def page(request, num="1"):
  9. # Output the appropriate page of blog entries, according to num.

指定view前缀(提取公因式)

patterns函数的第一个参数即是view的前缀

  1. from django.conf.urls import patterns, url
  2. urlpatterns = patterns('news.views',
  3. url(r'^articles/(\d{4})/$', 'year_archive'),
  4. url(r'^articles/(\d{4})/(\d{2})/$', 'month_archive'),
  5. url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'article_detail'),
  6. )

指定多个view前缀

  1. urlpatterns = patterns('myapp.views',
  2. url(r'^$', 'app_index'),
  3. url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$','month_display'),
  4. )
  5. urlpatterns += patterns('weblog.views',
  6. url(r'^tag/(?P<tag>\w+)/$', 'tag'),
  7. )

include其它匹配模块

  1. from django.conf.urls import include, patterns, url
  2. urlpatterns = patterns('',
  3. # ... snip ...
  4. url(r'^comments/', include('django.contrib.comments.urls')),
  5. url(r'^community/', include('django_website.aggregator.urls')),
  6. url(r'^contact/', include('django_website.contact.urls')),
  7. # ... snip ...
  8. )

当然也可以直接include其它patterns

  1. from django.conf.urls import include, patterns, url
  2. extra_patterns = patterns('',
  3. url(r'^reports/(?P<id>\d+)/$', 'credit.views.report'),
  4. url(r'^charge/$', 'credit.views.charge'),
  5. )
  6. urlpatterns = patterns('',
  7. url(r'^$', 'apps.main.views.homepage'),
  8. url(r'^help/', include('apps.help.urls')),
  9. url(r'^credit/', include(extra_patterns)),
  10. )

为view函数传递额外参数

  1. from django.conf.urls import patterns, url
  2. urlpatterns = patterns('blog.views',
  3. url(r'^blog/(?P<year>\d{4})/$', 'year_archive', {'foo': 'bar'}),
  4. )

直接使用view函数

  1. from django.conf.urls import patterns, url
  2. from mysite.views import archive, about, contact
  3. urlpatterns = patterns('',
  4. url(r'^archive/$', archive),
  5. url(r'^about/$', about),
  6. url(r'^contact/$', contact),
  7. )

以上这篇对Django url的几种使用方式详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号