Могу ли я ссылаться на именованный URL во включенном URLConf, используя тег "url" Джанго? - PullRequest
0 голосов
/ 03 августа 2009

В моем проекте Django у меня был один URLConf, urls.py в корне проекта. Этот URLConf включал в себя несколько именованных URL-адресов с использованием функции url() Django. В нескольких шаблонах я ссылаюсь на эти URL-адреса с помощью тега url, как {% url named_url %}. Это работало нормально.

Корень urls.py стал немного громоздким, поэтому я разделил его на URLConf для каждого приложения в app/urls.py. Некоторые URL-адреса все еще имеют имена. К сожалению, сейчас я получаю TemplateSyntaxException при использовании тега url в шаблонах. В частности, сообщение об ошибке:

При рендеринге возникла исключительная ситуация: обратное для myproj.myapp.new_test с аргументами () и ключевыми словами-аргументами {} не найдено

Есть ли способ ссылаться на именованные URL-адреса в специфичных для приложения URLConfs с помощью тега url в Django?

Ответы [ 4 ]

1 голос
/ 04 августа 2009

Вы определенно можете ссылаться на URL-адреса во включенных urlconfs через тег url - это фактически то, что вы должны делать. Однако я всегда считал тег url и функцию reverse() очень ненадежным и подверженным ошибкам, поэтому такие ошибки иногда случаются.

Мое предложение состояло бы в том, чтобы дать всем вашим URL-адресам имя, независимо от того, в каком URL-адресе они находятся. Тогда вам просто нужно обратиться к фактическому имени - вам не нужно указывать его название приложения или urlconf или что-нибудь еще. Посмотрим, сработает ли это.

0 голосов
/ 26 сентября 2012

Вероятно, бесполезно для вас, но, надеюсь, полезно для следующего парня, ищущего ответ:

Я использую Django 1.4, и я решил, что не использовал кавычки в теге шаблона:

{% url 'name_of_view' some_var %}

стало так:

{% url name_of_view some_var %}

И это вылечило это. Я не видел упоминаний об этом в документах django, а примеры в документах используют кавычки. Так что это кажется немного глючным, но, надеюсь, не даст кому-то вырвать волосы.

https://docs.djangoproject.com/en/dev/topics/http/urls/#naming-url-patterns

0 голосов
/ 04 августа 2009

Вы ссылаетесь на urls.py?

каждого приложения
from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^app1/',        include('app1.urls')),
    (r'^app2/', include('app2.urls')),
)

из Django Docs

0 голосов
/ 03 августа 2009

Я могу порекомендовать вам две вещи:

  • Использовать имя в шаблонах URL
  • Не делайте ссылки на имя проекта внутри приложения (как вы делали с «myproj.myapp.new_test». Если это был «правильный способ сделать», вы должны ссылаться только как «myapp.new_test»
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...