Django框架中处理URLconf中特定的URL的方法

有时你有一个模式来处理在你的URLconf中的一系列URL,但是有时候需要特别处理其中的某个URL。 在这种情况下,要使用将URLconf中把特殊情况放在首位的线性处理方式 。

比方说,你可以考虑通过下面这个URLpattern所描述的方式来向Django的管理站点添加一个目标页面

urlpatterns = patterns('',
  # ...
  ('^([^/]+)/([^/]+)/add/$', views.add_stage),
  # ...
)

这将匹配像 /myblog/entries/add/ 和 /auth/groups/add/ 这样的URL 。然而,对于用户对象的添加页面( /auth/user/add/ )是个特殊情况,因为它不会显示所有的表单域,它显示两个密码域等等。 我们 可以 在视图中特别指出以解决这种情况:

def add_stage(request, app_label, model_name):
  if app_label == 'auth' and model_name == 'user':
    # do special-case code
  else:
    # do normal code

不过,就如我们多次在这章提到的,这样做并不优雅: 因为它把URL逻辑放在了视图中。 更优雅的解决方法是,我们要利用URLconf从顶向下的解析顺序这个特点:

urlpatterns = patterns('',
  # ...
  ('^auth/user/add/$', views.user_add_stage),
  ('^([^/]+)/([^/]+)/add/$', views.add_stage),
  # ...
)

在这种情况下,象 /auth/user/add/ 的请求将会被 user_add_stage 视图处理。 尽管URL也匹配第二种模式,它会先匹配上面的模式。 (这是短路逻辑。)

(0)

相关推荐

  • Python的Django框架中从url中捕捉文本的方法

    每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式. 举个例子,在这行URLConf中: (r'^articles/(?P<year>\d{4})/$', views.year_archive), 尽管 \d{4} 将只匹配整数的字符串,但是参数 year 是作为字符串传至 views.year_archive() 的,而不是整型. 当你在写视图代码时记住这点很重要,许多Python内建的方法对于接受的对象的类型很讲究. 许多内置Python函数是挑剔的(这是理所当然

  • Django中URL视图函数的一些高级概念介绍

    说到关于请求方法的分支,让我们来看一下可以用什么好的方法来实现它. 考虑这个 URLconf/view 设计: # urls.py from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', # ... (r'^somepage/$', views.some_page), # ... ) # views.py from django.http import Http404,

  • 在Django中创建URLconf相关的通用视图的方法

    抽取出我们代码中共性的东西是一个很好的编程习惯. 比如,像以下的两个Python函数: def say_hello(person_name): print 'Hello, %s' % person_name def say_goodbye(person_name): print 'Goodbye, %s' % person_name 我们可以把问候语提取出来变成一个参数: def greet(person_name, greeting): print '%s, %s' % (greeting,

  • Django框架下在URLconf中指定视图缓存的方法

    将视图与缓存系统进行了耦合,从几个方面来说并不理想. 例如,你可能想在某个无缓存的站点中重用该视图函数,或者你可能想将该视图发布给那些不想通过缓存使用它们的人. 解决这些问题的方法是在 URLconf 中指定视图缓存,而不是紧挨着这些视图函数本身来指定. 完成这项工作非常简单: 在 URLconf 中用到这些视图函数的时候简单地包裹一个 cache_page .以下是刚才用到过的 URLconf : 这是之前的URLconf: urlpatterns = ('', (r'^foo/(\d{1,2

  • python中django框架通过正则搜索页面上email地址的方法

    本文实例讲述了python中django框架通过正则搜索页面上email地址的方法.分享给大家供大家参考.具体实现方法如下: import re from django.shortcuts import render from pattern.web import URL, DOM, abs, find_urls def index(request): """ find email addresses in requested url or contact page &quo

  • Django框架中处理URLconf中特定的URL的方法

    有时你有一个模式来处理在你的URLconf中的一系列URL,但是有时候需要特别处理其中的某个URL. 在这种情况下,要使用将URLconf中把特殊情况放在首位的线性处理方式 . 比方说,你可以考虑通过下面这个URLpattern所描述的方式来向Django的管理站点添加一个目标页面 urlpatterns = patterns('', # ... ('^([^/]+)/([^/]+)/add/$', views.add_stage), # ... ) 这将匹配像 /myblog/entries/

  • Django框架实现的普通登录案例【使用POST方法】

    本文实例讲述了Django框架实现的普通登录.分享给大家供大家参考,具体如下: 1.显示登录页面 a.设计url,通过浏览器访问http://127.0.0.1:8000//login的时候现实登录页面 b.设计url对应的视图函数 c.编写模板文件login.html 2.登录校验功能 校验数据库中有没有这个用户,这里用模拟的伪校验 新建login.html 在templates文件夹下的booktest文件夹下新建 <!DOCTYPE html> <html lang="e

  • 在Android系统中使用WebViewClient处理跳转URL的方法

    前言 最近代码里和WebView有很多的交互,webview是android中的浏览器控件,这里主要介绍一下webview如何重载WebViewClient类来控制URL加载. 使用WebViewClient 使用WebViewClinet主要是继承WebViewClient父类,根据需要重写其中的方法,并在WebView中进行配置,示例代码如下: webView = (WebView) findViewById(R.id.webview); webView.setWebViewClient(n

  • Django框架下在视图中使用模版的方法

    打开current_datetime 视图. 以下是其内容: from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(h

  • 在Django框架中伪造捕捉到的URLconf值的方法

    比如说你有匹配某个模式的一堆视图,以及一个并不匹配这个模式但视图逻辑是一样的URL. 这种情况下,你可以通过向同一个视图传递额外URLconf参数来伪造URL值的捕捉. 例如,你可能有一个显示某一个特定日子的某些数据的应用,URL类似这样的: /mydata/jan/01/ /mydata/jan/02/ /mydata/jan/03/ # ... /mydata/dec/30/ /mydata/dec/31/ 这太简单了,你可以在一个URLconf中捕捉这些值,像这样(使用命名组的方法): u

  • 详解Django框架中用户的登录和退出的实现

    Django 提供内置的视图(view)函数用于处理登录和退出 (以及其他奇技淫巧),但在开始前,我们来看看如何手工登录和退出. Django提供两个函数来执行django.contrib.auth\中的动作 : authenticate()和login(). 认证给出的用户名和密码,使用 authenticate() 函数.它接受两个参数,用户名 username 和 密码 password ,并在密码对给出的用户名合法的情况下返回一个 User 对象. 如果密码不合法,authenticat

随机推荐