Джанго Новичок: Реверс не найден

У меня есть строка в форме Django:

{% for aa in my_array %}

который, кажется, вызывает эту ошибку:

Ошибка шаблона

Обнаружено исключение при рендеринге: Обратное для «dev_env.profiles.views.viewPlan» с аргументами «('',)» и аргументами ключевого слова «{}» не найдено.

Что на самом деле означает это сообщение об ошибке?

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

Что, черт возьми, я должен искать?

Обновление: Пауло отсортировал это ниже.

На самом деле у меня было {% url viewPlan planId %} через пару строк (поэтому строка сообщения об ошибке была неправильной), но ошибка была вызвана тем, что в этом случае planId был пуст.


person interstar    schedule 09.03.2009    source источник


Ответы (3)


У вас есть представление с именем viewPlan, с которым вы делаете что-то вроде этого в шаблоне:

{% url viewPlan %}

или что-то вроде этого в представлении:

reverse('viewPlan')

Если вы это сделаете, и у вас нет строки, которая выглядит так:

url(r'^whatever/url/$', 'dev_env.profiles.views.viewPlan', name="viewPlan"),

... в вашей конфигурации URL-адреса я бы предположил, что вы получаете ошибку. В качестве альтернативы и, что более вероятно, вы, вероятно, фиксируете значение (возможно, идентификатор или что-то еще) в URL-адресе viewPlan, но не передаете аргумент при изменении URL-адреса. Итак, если вы фиксируете какие-либо значения в регулярном выражении, например:

url(r'^plans/(\d+)$', 'dev_env.profiles.views.viewPlan', name="viewPlan"),

Вам нужно вызвать его так:

{% url viewPlan 15 %}

Или вот так:

reverse('viewPlan', args=[15]);

Где 15, очевидно, соответствует захваченному значению.

person Paolo Bergantino    schedule 09.03.2009
comment
спасибо, это привело меня в правильном направлении. На самом деле это был просто аргумент, который я передал в {% url был пуст в этом контексте. Cheers - person interstar; 09.03.2009
comment
Вы также получите ту же ошибку, если замените «viewPlan» на «viewPan». - person Casebash; 05.06.2010
comment
+1 за реверс('viewPlan', args=[15]) .. эти чертовы args[] !! - person Soask; 12.07.2012

Иногда нужно включить app_label в аргумент имени

например, когда определяете app_name='core' в вашем core.urls

тогда обратный путь viewPlan будет:

reverse('core:viewPlan', args=[15]);
person C.K.    schedule 31.07.2019
comment
Это помогло мне решить ту же проблему, когда у меня были представления из нескольких приложений, и я пытался перенаправить на представление в отдельном приложении. - person ElectroMotiveHorse; 01.10.2019

Я была такая же проблема. В моем случае я забыл добавить URL-адреса дочернего приложения в основной файл urls.py:

urlpatterns = [
    re_path("admin/", admin.site.urls),
    re_path(r"^core/", include("core.urls")),
    re_path(r"^$", welcome, name="welcome")
]
person maccaroo    schedule 29.01.2018
comment
это решило мою проблему. нужен путь к дочернему URL. Спасибо - person Nils Zenker; 14.05.2018