alex_deerk
@alex_deerk
В ответах некомпетентен. Пытаю Python

Django как в url передать параметр из контекста шаблона?

Шаблон:

<form action="{% url 'new_item' category=category %}" method="post">

Урлы:

url(r'^new/(?P<category>[\w\-]+)/$', views.new_item, name='new_item'),

Представление:

def new_item(req, category=''):
args = dict()
args.update(csrf(req))
if req.method == 'POST':
    if category == 'phone':
        form = PhoneForm(req.POST, req.FILES)
        if form.is_valid():
            form.save()
            return redirect('general')
        else:
            args['form'] = form
            return render_to_response('new_item/index.html', args)
else:
    if category == 'phone':
        args['form'] = PhoneForm()
        args['category'] = 'phone'
return render_to_response('new_item/index.html', args)

Причём для обычной ссылки подобный код срабатывает, а для form нет

<a href="{% url 'new_item' category=category %}"></a>

Ошибка:

NoReverseMatch at /adminpanel/new/phone/ Reverse for 'new_item' with arguments '()' and keyword arguments '{'category': ''}' not found. 1 pattern(s) tried: ['adminpanel/new/(?P[\w\-]+)/$']


На данный момент передаю в контекст url через reverse во въюшке, но хотелось бы понять.
  • Вопрос задан
  • 1370 просмотров
Пригласить эксперта
Ответы на вопрос 2
@d1skort
junior
Так в ветке POST во вьюшке category не передается в контекст.
Ответ написан
@swansong
Из ошибки видно, что в шаблоне category не определена, и reverse не может найти подходящую запись в urlconf т.к. пустая категория не соответвует регулярке (?P[\w\-]+).
Как формируешь url во view?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы