Sam*_*dra 8 python regex django-urls
我在urls.py中使用正则表达式时遇到了一些问题(我是django的初学者以及一般的正则表达式)
这是我原来的urls.py
url(r'^name/(?P<name>\w+)/$', 'course.views.name'),
url(r'^', 'course.views.index'),
Run Code Online (Sandbox Code Playgroud)
我试图使用这个来访问它:
http://127.0.0.1:8000/name/blah/
Run Code Online (Sandbox Code Playgroud)
我的观点如下:
def index(request):
return HttpResponse("Hello, sam. You're at the course index.")
def name(request, name):
return HttpResponse("Hello, %s. You're at the course index." % name)
Run Code Online (Sandbox Code Playgroud)
我得到的结果是,无论我给出什么输入,我都会定期获得"索引"功能,而不是"名称"功能.我认为问题出在第一个正则表达式上.
但后来,我把第二个改为:
url(r'^$', 'course.views.index'),
Run Code Online (Sandbox Code Playgroud)
而这正是我认为它工作的方式!
我知道"$"表示行尾,但是第一个正则表达式是不是已经被评估过了?这些表达式匹配的顺序是什么?
在每个网址上添加"$"并不是什么大不了的事,但我想理解为什么要把它放在那里.
我正在使用Django1.4和Python 2.7
阅读 Django文档
Django 如何处理请求
当用户从 Django 驱动的站点请求页面时,系统将遵循以下算法来确定要执行的 Python 代码:
- Django 确定要使用的根 URLconf 模块。通常,这是 ROOT_URLCONF 设置的值,但如果传入的 HttpRequest 对象具有名为 urlconf 的属性(由中间件请求处理设置),则将使用其值代替 ROOT_URLCONF 设置。
- Django 加载该 Python 模块并查找变量 urlpatterns。这应该是一个 Python 列表,采用函数 django.conf.urls.patterns() 返回的格式。
- Django 按顺序运行每个 URL 模式,并在第一个与请求的 URL 匹配的模式处停止。
- 一旦其中一个正则表达式匹配,Django 就会导入并调用给定的视图,这是一个简单的 Python 函数。该视图将 HttpRequest 作为其第一个参数传递,并将正则表达式中捕获的任何值作为其余参数传递。
- 如果没有正则表达式匹配,或者在此过程中的任何点引发异常,Django 将调用适当的错误处理视图。请参阅下面的错误处理。
它说3. Django runs through each URL pattern, in order, and stops at the first one that matches the requested URL.所以我认为这是一个错误。
您应该添加$每个 url 模式,除非Including other URLconfs
| 归档时间: |
|
| 查看次数: |
2720 次 |
| 最近记录: |