Каков порядок оценки регулярного выражения urls.py в django?

У меня были некоторые проблемы с регулярным выражением в urls.py (я новичок в django, а также в регулярных выражениях в целом)

Вот мой оригинальный urls.py

url(r'^name/(?P<name>\w+)/$', 'course.views.name'),
url(r'^', 'course.views.index'),

И я пытался получить к нему доступ, используя это:

http://127.0.0.1:8000/name/blah/

Моя точка зрения выглядит так:

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)

Результат, который я получил, состоял в том, что независимо от того, какой ввод я вводил, я регулярно получал функцию «индекс», а не функцию «имя». Я думал, что проблема была с первым регулярным выражением.

Но затем я изменил второй на:

url(r'^$', 'course.views.index'),

И ЭТО работает именно так, как я понял!

Я понимаю, что "$" означает конец строки, но разве первое регулярное выражение не должно оцениваться первым? Каков порядок сопоставления этих выражений?

Добавление «$» к каждому URL-адресу не такое уж большое дело, но я хотел бы понять, почему я его туда добавляю.

Я использую Django1.4 и Python 2.7

8
задан Samudra 4 June 2012 в 08:43
поделиться