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

 更新时间:2015年07月20日 09:54:12   投稿:goldensun  
这篇文章主要介绍了Python的Django框架中从url中捕捉文本的方法,以及URLconf搜索的一些相关情况,需要的朋友可以参考下

每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式。 举个例子,在这行URLConf中:

(r'^articles/(?P<year>\d{4})/$', views.year_archive),

尽管 \d{4} 将只匹配整数的字符串,但是参数 year 是作为字符串传至 views.year_archive() 的,而不是整型。

当你在写视图代码时记住这点很重要,许多Python内建的方法对于接受的对象的类型很讲究。 许多内置Python函数是挑剔的(这是理所当然的)只接受特定类型的对象。 一个典型的的错误就是用字符串值而不是整数值来创建 datetime.date 对象:

>>> import datetime
>>> datetime.date('1993', '7', '9')
Traceback (most recent call last):
  ...
TypeError: an integer is required
>>> datetime.date(1993, 7, 9)
datetime.date(1993, 7, 9)

回到URLconf和视图处,错误看起来很可能是这样:

# urls.py

from django.conf.urls.defaults import *
from mysite import views

urlpatterns = patterns('',
  (r'^articles/(\d{4})/(\d{2})/(\d{2})/$', views.day_archive),
)

# views.py

import datetime

def day_archive(request, year, month, day):
  # The following statement raises a TypeError!
  date = datetime.date(year, month, day)

因此, day_archive() 应该这样写才是正确的:

def day_archive(request, year, month, day):
  date = datetime.date(int(year), int(month), int(day))

注意,当你传递了一个并不完全包含数字的字符串时, int() 会抛出 ValueError 的异常,不过我们已经避免了这个错误,因为在URLconf的正则表达式中已经确保只有包含数字的字符串才会传到这个视图函数中。
决定URLconf搜索的东西

当一个请求进来时,Django试着将请求的URL作为一个普通Python字符串进行URLconf模式匹配(而不是作为一个Unicode字符串)。 这并不包括 GET 或 POST 参数或域名。 它也不包括第一个斜杠,因为每个URL必定有一个斜杠。

例如,在向 http://www.example.com/myapp/ 的请求中,Django将试着去匹配 myapp/ 。在向 http://www.example.com/myapp/?page=3 的请求中,Django同样会去匹配 myapp/ 。

在解析URLconf时,请求方法(例如, POST , GET , HEAD )并 不会 被考虑。 换而言之,对于相同的URL的所有请求方法将被导向到相同的函数中。 因此根据请求方法来处理分支是视图函数的责任。

 

相关文章

  • Python函数参数类型及排序原理总结

    Python函数参数类型及排序原理总结

    这篇文章主要介绍了Python函数参数类型及排序原理总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • python实现将列表中各个值快速赋值给多个变量

    python实现将列表中各个值快速赋值给多个变量

    这篇文章主要介绍了python实现将列表中各个值快速赋值给多个变量,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python中getattr函数详解

    Python中getattr函数详解

    getattr是Python中的内置函数,用于获取一个对象的属性值,下面这篇文章主要给大家介绍了关于Python中getattr函数的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Python Numpy中ndarray的常见操作

    Python Numpy中ndarray的常见操作

    这篇文章主要介绍了Python Numpy中ndarray的常见操作,NumPy是Python的一种开源的数值计算扩展,更多详细内容需要的朋友可以参考一下
    2022-07-07
  • Python输出汉字字库及将文字转换为图片的方法

    Python输出汉字字库及将文字转换为图片的方法

    这篇文章主要介绍了Python输出汉字字库及将文字转换为图片的方法,分别用到了codecs模块和pygame模块,需要的朋友可以参考下
    2016-06-06
  • 对于Python中RawString的理解介绍

    对于Python中RawString的理解介绍

    下面小编就为大家带来一篇对于Python中RawString的理解介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • 在Python中居然可以定义两个同名通参数的函数

    在Python中居然可以定义两个同名通参数的函数

    今天小编就为大家分享一篇在Python中居然可以定义两个同名通参数的函数,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 教你使用一行Python代码玩遍童年的小游戏

    教你使用一行Python代码玩遍童年的小游戏

    这篇文章主要介绍了一行Python代码玩遍童年的小游戏,帮助大家重回童年快乐时光,代码简单易懂,感兴趣的朋友一起学习下吧
    2021-08-08
  • python获取指定网页上所有超链接的方法

    python获取指定网页上所有超链接的方法

    这篇文章主要介绍了python获取指定网页上所有超链接的方法,涉及Python使用urllib2模块操作网页抓取的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 用Cython加速Python到“起飞”(推荐)

    用Cython加速Python到“起飞”(推荐)

    这篇文章主要介绍了用Cython加速Python到“起飞”,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论