Django NoReverseMatch - PullRequest
       7

Django NoReverseMatch

6 голосов
/ 29 июля 2011

У меня есть следующие настройки:

/landing_pages
    views.py
urls.py

В urls.py У меня есть следующее, которое работает, когда я пытаюсь получить доступ к /competition:

from django.conf.urls.defaults import *
from django.conf import settings
from django.views.generic.simple import direct_to_template

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^competition$', 'landing_pages.views.page', {'page_name': 'competition'}, name="competition_landing"),
)

Мой views.py имеет что-то вроде этого:

def page(request, page_name):
    return HttpResponse('ok')

Тогда в шаблоне я пытаюсь сделать это:

{% load url from future %}
<a href="{% url 'landing_pages.views.page' page_name='competition'%}">
    Competition
</a>

Что я, очевидно, не могу сделать:

Поймано NoReverseMatch при рендеринге: обратное для 'landing_pages.views.page' с аргументами '()' и аргументами с ключевыми словами '{' page_name ': u'competition'} 'не найдено.

Что я делаю не так?

Ответы [ 2 ]

10 голосов
/ 29 июля 2011

Вы спрашиваете в своем комментарии к DrTyrsa, почему вы не можете использовать args или kwargs. Просто подумайте об этом на мгновение. Тег {% url %} выводит - как следует из названия - фактический URL, по которому пользователь может щелкнуть. Но вы не предоставили места в шаблоне URL для аргументов. Куда они пойдут? Как будет выглядеть URL? Как это будет работать?

Если вы хотите разрешить пользователю указывать аргументы для вашего представления, вы должны предоставить шаблон URL с пробелом для этих аргументов.

0 голосов
/ 29 июля 2011
{% url [project_name].landing_pages.views.page page_name='competition' %}

Или лучше

{% url competition_landing 'competition' %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...