Python的Django框架中URLconf相关的一些技巧整理
提供视图配置选项
如果你发布一个Django的应用,你的用户可能会希望配置上能有些自由度。 这种情况下,为你认为用户可能希望改变的配置选项添加一些钩子到你的视图中会是一个很好的主意。 你可以用额外URLconf参数实现。
一个应用中比较常见的可供配置代码是模板名字:
def my_view(request, template_name): var = do_something() return render_to_response(template_name, {'var': var})
了解捕捉值和额外参数之间的优先级 额外的选项
当冲突出现的时候,额外URLconf参数优先于捕捉值。 也就是说,如果URLconf捕捉到的一个命名组变量和一个额外URLconf参数包含的变量同名时,额外URLconf参数的值会被使用。
例如,下面这个URLconf:
from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', (r'^mydata/(?P<id>\d+)/$', views.my_view, {'id': 3}), )
这里,正则表达式和额外字典都包含了一个 id 。硬编码的(额外字典的) id 将优先使用。 就是说任何请求(比如, /mydata/2/ 或者 /mydata/432432/ )都会作 id 设置为 3 对待,不管URL里面能捕捉到什么样的值。
聪明的读者会发现在这种情况下,在正则表达式里面写上捕捉是浪费时间的,因为 id 的值总是会被字典中的值覆盖。 没错,我们说这个的目的只是为了让你不要犯这样的错误。
调试模式中的特例
说到动态构建 urlpatterns,你可能想利用这一技术,在 Django 的调试模式下修改 URLconf 的行为。 为了做到这一点,只要在运行时检查 DEBUG 配置项的值即可,如:
from django.conf import settings from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', (r'^$', views.homepage), (r'^(\d{4})/([a-z]{3})/$', views.archive_month), ) if settings.DEBUG: urlpatterns += patterns('', (r'^debuginfo/$', views.debug), )
在这个例子中,URL链接/debuginfo/ 只在你的 DEBUG 配置项设为 True 时才有效。
相关推荐
-
使用url_helper简化Python中Django框架的url配置教程
django的url采用正则表达式进行配置,虽然强大却也广为诟病.反对者们认为django的url配置过于繁琐,且不支持默认的路由功能. 我倒觉得还好,只是如果觉得不爽,为什么不自己小小的hack一下,反正也就几行代码的事. 在这个背景下,我整了这个url_helper,利用url_helper可以简化配置和实现url的默认路由.所谓的url_helper其实就只有url_helper.py一个文件,使用的时候只想要import就可以. url_helper的具体用法请参考具体的例子: url_
-
在Django中限制已登录用户的访问的方法
有很多原因需要控制用户访问站点的某部分. 一个简单原始的限制方法是检查 request.user.is_authenticated() ,然后重定向到登陆页面: from django.http import HttpResponseRedirect def my_view(request): if not request.user.is_authenticated(): return HttpResponseRedirect('/accounts/login/?next=%s' % reque
-
Python的Django框架中从url中捕捉文本的方法
每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式. 举个例子,在这行URLConf中: (r'^articles/(?P<year>\d{4})/$', views.year_archive), 尽管 \d{4} 将只匹配整数的字符串,但是参数 year 是作为字符串传至 views.year_archive() 的,而不是整型. 当你在写视图代码时记住这点很重要,许多Python内建的方法对于接受的对象的类型很讲究. 许多内置Python函数是挑剔的(这是理所当然
-
Python中Django框架利用url来控制登录的方法
本文实例讲述了Python中Django框架利用url来控制登录的方法.分享给大家供大家参考.具体如下: from django.conf.urls.defaults import patterns,url #or use login_required from django.contrib.admin.views.decorators import staff_member_required def login_url(regex, view, *p,**args): """
-
详解Django框架中用户的登录和退出的实现
Django 提供内置的视图(view)函数用于处理登录和退出 (以及其他奇技淫巧),但在开始前,我们来看看如何手工登录和退出. Django提供两个函数来执行django.contrib.auth\中的动作 : authenticate()和login(). 认证给出的用户名和密码,使用 authenticate() 函数.它接受两个参数,用户名 username 和 密码 password ,并在密码对给出的用户名合法的情况下返回一个 User 对象. 如果密码不合法,authenticat
-
Python的Django框架中的URL配置与松耦合
现在是好时机来指出Django和URL配置背后的哲学: 松耦合 原则. 简单的说,松耦合是一个 重要的保证互换性的软件开发方法. Django的URL配置就是一个很好的例子. 在Django的应用程序中,URL的定义和视图函数之间是松 耦合的,换句话说,决定URL返回哪个视图函数和实现这个视图函数是在两个不同的地方. 这使得 开发人员可以修改一块而不会影响另一块. 例如,考虑一下current_datetime视图. 如果我们想把它的URL 从原来的 /time/ 改变到 /currenttim
-
Python的Django框架中URLconf相关的一些技巧整理
提供视图配置选项 如果你发布一个Django的应用,你的用户可能会希望配置上能有些自由度. 这种情况下,为你认为用户可能希望改变的配置选项添加一些钩子到你的视图中会是一个很好的主意. 你可以用额外URLconf参数实现. 一个应用中比较常见的可供配置代码是模板名字: def my_view(request, template_name): var = do_something() return render_to_response(template_name, {'var': var}) 了解捕
-
Python的Django框架中if标签的相关使用
{% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% endif %} 之间的任何内容,例如: {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% endif %} {% else %} 标签是可选的: {% if today_is_weekend %} <p>Welcome to the weekend!
-
全面剖析Python的Django框架中的项目部署技巧第1/2页
项目开始时是一个关键时刻,选择会对项目产生长期的影响.有很多关于如何开始使用Django框架的教程,但很少讨论如何专业地使用Django,或如何使用行业公认的最佳做法来确保你的项目规模的持续增长.事前的筹划让你(和所有同事的生活)在走向将来时更容易. 文章结束时,你将有 一个全功能的Django 1.6项目 源代码受控的所有资源(使用Git或Mercurial) 自动回归和单元测试(使用unittest库) 一个独立于特定环境的安装项目(使用virtualenv) 自动化的部署和测试(使用Fab
-
Python的Django框架中的Context使用
一旦你创建一个 Template 对象,你可以用 context 来传递数据给它. 一个context是一系列变量和它们值的集合. context在Django里表现为 Context 类,在 django.template 模块里. 她的构造函数带有一个可选的参数: 一个字典映射变量和它们的值. 调用 Template 对象 的 render() 方法并传递context来填充模板: >>> from django.template import Context, Template &
-
在Python的Django框架中加载模版的方法
为了减少模板加载调用过程及模板本身的冗余代码,Django 提供了一种使用方便且功能强大的 API ,用于从磁盘中加载模板, 要使用此模板加载API,首先你必须将模板的保存位置告诉框架. 设置的保存文件就是settings.py. 如果你是一步步跟随我们学习过来的,马上打开你的settings.py配置文件,找到TEMPLATE_DIRS这项设置吧. 它的默认设置是一个空元组(tuple),加上一些自动生成的注释. TEMPLATE_DIRS = ( # Put strings here, li
-
在Python的Django框架中创建和使用模版
如何使用模板系统 让我们深入研究模板系统,你将会明白它是如何工作的.但我们暂不打算将它与先前创建的视图结合在一起,因为我们现在的目的是了解它是如何独立工作的. . (换言之, 通常你会将模板和视图一起使用,但是我们只是想突出模板系统是一个Python库,你可以在任何地方使用它,而不仅仅是在Django视图中.) 在Python代码中使用Django模板的最基本方式如下: 可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Templa
-
在Python的Django框架中为代码添加注释的方法
就像HTML或者Python,Django模板语言同样提供代码注释. 注释使用 {# #} : {# This is a comment #} 注释的内容不会在模板渲染时输出. 用这种语法的注释不能跨越多行. 这个限制是为了提高模板解析的性能. 在下面这个模板中,输出结果和模板本身是 完全一样的(也就是说,注释标签并没有被解析为注释): This is a {# this is not a comment #} test. 如果要实现多行注释,可以使用`` {% comment %}`` 模板标
-
详解在Python的Django框架中创建模板库的方法
不管是写自定义标签还是过滤器,第一件要做的事是创建模板库(Django能够导入的基本结构). 创建一个模板库分两步走: 第一,决定模板库应该放在哪个Django应用下. 如果你通过 manage.py startapp 创建了一个应用,你可以把它放在那里,或者你可以为模板库单独创建一个应用. 我们更推荐使用后者,因为你的filter可能在后来的工程中有用. 无论你采用何种方式,请确保把你的应用添加到 INSTALLED_APPS 中. 我们稍后会解释这一点. 第二,在适当的Django应用包里创
-
详解Python的Django框架中manage命令的使用与扩展
[简介] django-admin.py是Django的一个用于管理任务的命令行工具.本文将描述它的大概用法. 另外,在每一个Django project中都会有一个manage.py.manage.py是对django-admin.py的简单包装,它额外帮助我们做了两件事情: 它将你的project的包放到sys.path中 它将DJANGO_SETTINGS_MODULE环境变量设置为了你的project的setting.py文件的位置. 如果你是通过setup.py工具来安装Django的
-
Python的Django框架中设置日期和字段可选的方法
设置字段可选 在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的. 举个例子,我们想要Author模块中的email字段成为可选,即允许不填. 在现实世界中,你可能没有为每个作者登记邮箱地址. 为了指定email字段为可选,你只要编辑Book模块(回想第五章,它在mysite/books/models.py文件里),在email字段上加上blank=True.代码如下: class Author(models.Model): f
随机推荐
- [译]ASP.NET Core 2.0 网址重定向的方法
- redis集群搭建教程及遇到的问题处理
- autoit 更改个人文件夹的小工具
- AJAX省市区三级联动下拉菜单(java版)
- Angular2学习教程之TemplateRef和ViewContainerRef详解
- 用vbs读取Excel文件的函数代码
- iis支持asp.net4.0的注册命令使用方法
- JS 中使用Promise 实现红绿灯实例代码(demo)
- JavaScript之自定义类型
- php中count获取多维数组长度的方法
- Android编程开发之打开文件的Intent及使用方法
- 微信公众平台开发(五) 天气预报功能开发
- python 实现归并排序算法
- CSS超级技巧大放送合集
- JavaScript实现离开页面前提示功能【附jQuery实现方法】
- AJAX在Post中文的时候乱码的解决方法
- asp中获取当前月份距离以前某个时间的月份数
- SQL语句分组获取记录的第一条数据的方法
- C#窗体传值实例汇总
- Node.js 条形码识别程序构建思路详解