Сбой администратора Django при использовании включений в urlpatterns - PullRequest
1 голос
/ 17 марта 2010

Я пытаюсь немного реорганизовать свое приложение, чтобы оно не стало слишком громоздким. Таким образом, я начал перемещать некоторые из urlpatterns во вложенные файлы, как это предлагается в документации.

Помимо того факта, что он просто не работает (элементы не перенаправляются), но когда я иду к администратору, он говорит, что 'urlpatterns не был определен'.

url.py, который я имею в корне моего приложения:

if settings.ENABLE_SSL:
urlpatterns = patterns('',
    (r'^checkout/orderform/onepage/(\w*)/$','checkout.views.one_page_orderform',{'SSL':True},'commerce.checkout.views.single_product_orderform'),
)
else:
    urlpatterns = patterns('',
    (r'^checkout/orderform/onepage/(\w*)/$','commerce.checkout.views.single_product_orderform'),
)

urlpatterns+= patterns('',
    (r'^$', 'alchemysites.views.route_to_home'),
    (r'^%s/' % settings.DAJAXICE_MEDIA_PREFIX, include('dajaxice.urls')),
    (r'^/checkout/', include('commerce.urls')),
    (r'^/offers',include('commerce.urls')),
    (r'^/order/',include('commerce.urls')),
    (r'^admin/', include(admin.site.urls)),
    (r'^accounts/login/$',  login),
    (r'^accounts/logout/$', logout),
    (r'^(?P<path>.*)/$','alchemysites.views.get_path'),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root':settings.MEDIA_ROOT}),

URL-адреса, которые я до сих пор удалил, - это оформление заказа / предложения / заказы, которые являются подпапами «коммерции», где urls.py для приложений должен быть понятным.

/ urls.py в вопросах (входит сюда)

/ commerce / urls.py, где я хочу включить urls.py:

order_info = {
'queryset': Order.objects.all(),
}


urlpatterns+= patterns('',


(r'^offers/$','offers.views.start_offers'),
(r'^offers/([a-zA-Z0-9-]*)/order/(\d*)/add/([a-zA-Z0-9-]*)/(\w*)/next/([a-zA-Z0-9-)/$','offers.views.show_offer'),
(r'^reports/orders/$', list_detail.object_list,order_info),
)

и предложения приложений находятся под коммерцией.

И поэтому дополнительная проблема заключается в том, что администратор вообще не будет работать, поэтому я думаю, потому что я где-то убил его своими включениями.

Вещи, которые я проверил: Является ли переменная urlpatterns, случайно сброшенная где-то (т.е. urlpatterns = pattern, а не urlpatterns + = Patterns) Действительны ли шаблоны в commerce.urls (да, когда они возвращаются в корень, они работают).

Так что оттуда я в тупике. Я могу переместить все обратно в корень, но пытался немного отделиться, не только по теоретическим причинам, но и по некоторым краткосрочным.

Наконец, если я ввожу www.domainname / checkout / orderform / onepage / xxxjsd, я получаю правильную страницу. Однако ввод www.domainname / checkout / обрабатывается alchemysites.views.get_path.

Если нет ответа (потому что это чертовски специфично), то есть ли хороший способ для устранения неполадок urls.py? Кажется, это просто метод проб и ошибок. Кажется, должен быть какой-то парсер, который скажет вам, что будут делать ваши urlpatterns.

Ответы [ 2 ]

4 голосов
/ 18 июля 2016

Добавление следующей строки в мой urls.py сработало для меня:

from django.conf.urls import include 
3 голосов
/ 17 марта 2010

Посмотрите документы django для , включая другие URL-ссылки . Я думаю, вы могли их неправильно понять. В частности

Всякий раз, когда Django встречает include (), он отсекает любую часть URL, совпадающую с этой точкой, и отправляет оставшуюся строку во включенный URLconf для дальнейшей обработки.

Например, у вас есть

(r'^/checkout/', include('commerce.urls')),
(r'^/offers',include('commerce.urls')),
(r'^/order/',include('commerce.urls')),

Это означает, что

/checkout/offers/
/offers/offers/
/order/offers/

будет соответствовать шаблону URL (r'^offers/$','offers.views.start_offers') в commerce/urls.py.

Если вы хотите определить представление для /checkout/ в commerce.py, вам нужно добавить шаблон

(r'^$', 'path_to_your_view')

потому что / checkout / part будет отрублен include()


Как, в сторону:

В /commerce/urls.py, используйте

urlpatterns = patterns('',
    ...

для первых определяемых вами шаблонов. Затем вы можете использовать urlpatterns += позже в том же файле.

...