欢迎来到山村网

使用url_helper简化Python中Django框架的url配置教程

2019-03-02 13:36:23浏览:405 来源:山村网   
核心摘要:  这篇文章主要介绍了使用url_helper简化Python中Django框架的url配置教程,需要的朋友可以参考下  django的url采用正则表达

  这篇文章主要介绍了使用url_helper简化Python中Django框架的url配置教程,需要的朋友可以参考下

  django的url采用正则表达式进行配置,虽然强大却也广为诟病。反对者们认为django的url配置过于繁琐,且不支持默认的路由功能。

  我倒觉得还好,只是如果觉得不爽,为什么不自己小小的hack一下,反正也就几行代码的事。

  在这个背景下,我整了这个url_helper,利用url_helper可以简化配置和实现url的默认路由。所谓的url_helper其实就只有url_helper.py一个文件,使用的时候只想要import就可以。

  url_helper的具体用法请参考具体的例子:

  url_helper下载/范例

  下面对使用方法做个简单的说明。

  url的默认路由

  ?

1 2 3 4 5 6 from url_helper import execute, url_ import views urlpatterns += patterns('', url(r'^(?P<urls>.*)', execute, {'views': views}), )

  在urls.py里增加如下配置,其中views为需要进行路由的views模块。url的规则为 /action/param1/param2/…/ 。

  例如:

  ?

1 2 3 4 5 #/edit/4/ def edit(request, n="id"): html = """ edit object: %s""" % n return HttpResponse(html)

  在没有指定action的时候默认使用的action为index。

  提供函数url_简化url配置

  仿照ROR的做法,参数用”:”标识。

  例如:

  ?

1 2 3 4 5 6 #url_(r'/space/:username/:tag/', views.url_), #/space/vicalloy/just/ def url_(request, username, tag): html = """ username: %s <br/> tag: %s""" % (username, tag) return HttpResponse(html)

  url_helper的完整代码

  就如前面说的,代码非常少。不过实际应用的话,应当还需要做一些扩展。

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #!/usr/bin/env python # -*- coding: UTF-8 -*- from django import http from django.conf.urls.defaults import url import re def execute(request, urls, views): """ urls [methodName/]param1/param2/.../ methodName default index """ def get_method(views, methodName): try: return getattr(views, methodName) except Exception, e: return None method = None params = [e for e in urls.split("/") if e] params.reverse() if params: method = get_method(views, params.pop()) if not method: method = get_method(views, 'index') if not method: raise http.Http404('The requested admin page does not exist.') return method(request, *params) def url_(*args,**dic): regex = args[0] if regex[0] == "/": regex = regex[1:] regex = '^' + regex regex = regex + '$' regex = re.sub(":[^/]+", lambda matchobj: "(?P<%s>[^/]+)" % matchobj.group(0)[1:], regex) return url(regex, *args[1:], **dic)
(责任编辑:豆豆)
下一篇:

在Python的Django框架下使用django-tagging的教程

上一篇:

在Python的Django框架中simple-todo工具的简单使用

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com