2009-07-15 2 views
0

я делаю что-то подобное в myproject.myapp.urls:Джанго: включать другие urlpatterns в одном urls.py

from django.conf.urls.defaults import * 

urlpatterns = patterns('myproject.myapp.views', 
    (ur'^$', 'index'), 
    (ur'^browse/$', 'browse'), 
    (ur'^request/new/$', 'new_request'), 
    (ur'^(?P<url_key>[-a-zA-Z0-9]+)/$', 'view1'), 
    (ur'^(?P<url_key>[-a-zA-Z0-9]+)/asdf$', 'view2'), 
    (ur'^(?P<url_key>[-a-zA-Z0-9]+)/qwer$', 'view3'), 
    (ur'^(?P<url_key>[-a-zA-Z0-9]+)/zxcv$', 'view4'), 
    (ur'^(?P<url_key>[-a-zA-Z0-9]+)/tyui$', 'view5'), 
    (ur'^(?P<url_key>[-a-zA-Z0-9]+)/ghjk$', 'view6'), 
    (ur'^(?P<url_key>[-a-zA-Z0-9]+)/bnm/more-looong-url/$', 'view7'), 
    ... 
) 

Я попытался реорганизовать выше правил и определить их в другой файл urls2.py так:

(ur'^(?P<url_key>[-a-zA-Z0-9]+)/', include('myproject.myapp.urls2')), 

, но он, похоже, вызывает проблемы с модульными тестами, включая urlresolvers.

Есть ли лучший способ «реорганизовать» общую часть регулярного выражения (<url_key>) здесь?

+1

Какие проблемы это может вызвать? Использование include ('') обычно довольно просто. Не могли бы вы описать ошибки, которые он дал, или как результат отличается от того, что вы ожидали? – anschauung

ответ

1

Я не думаю, что вы можете делать то, что вы пытаетесь сделать с этой линией:

(ur'^(?P<url_key>[-a-zA-Z0-9]+)/', include('myproject.myapp.urls2')) 

Что вид параметр url_key будет передан?

Я не знаю, почему вы хотите, чтобы реорганизовать urlpatterns, чтобы начать с, но, возможно, это было бы лучше ?:

from django.conf.urls.defaults import * 

URL_KEY = ur'^(?P<url_key>[-a-zA-Z0-9]+)' 

urlpatterns = patterns('myproject.myapp.views', 
    (ur'^$', 'index'), 
    (ur'^browse/$', 'browse'), 
    (ur'^request/new/$', 'new_request'), 
    (URL_KEY+ur'/$', 'view1'), 
    (URL_KEY+ur'/asdf$', 'view2'), 
    (URL_KEY+ur'/qwer$', 'view3'), 
    ...etc 
) 
+0

Ну, я исправил свои тестовые проблемы и принял мое первоначальное решение, но это хорошее предложение. Поэтому я выбираю это как ответ. :) – Achimnol

3

Я не специалист по django, но не будет ли элемент «view1» соответствовать всем другим элементам ниже, так как в конце он не имеет «$»? Таким образом, у других представлений не было бы шанса получить соответствие.

+0

+1 положить ловушку в конце или просто включить $ за каждый URL. – Soviut

+0

А, это моя ошибка. Я даю вам один голос. :) – Achimnol

0

Возможно, вы могли бы упростить выражения в myproject.myapp.urls и вместо этого передавать информацию как параметр функции в myproject.myapp.views?

Я не уверен, что было не так в ваших тестах, но, как правило, вы сможете делать больше в myproject.myapp.views, так как вам не нужно основывать все это на логике регулярных выражений.

Этой функция в myproject.myapp.views бы распределительном щите, который вызывает view1, view2 и т.д.