Django: получить NoReverseMatch при ошибке рендеринга - PullRequest
1 голос
/ 28 июня 2011

Кажется, я получаю сообщение об ошибке Caught NoReverseMatch. Я не уверен, что является причиной проблемы. Посмотрите на полную ошибку.

Caught NoReverseMatch while rendering: Reverse for 'mmc.views.edit_note' with arguments '(1L, '')' and keyword arguments '{}' not found.

На моей странице get_client. У меня есть ссылка на страницу редактирования заметки. Я предполагаю, что проблема может быть здесь, в моем шаблоне. Я думаю, что note.pk является проблемой.

<a href="{% url mmc.views.edit_notes client.pk note.pk %}"> Edit Note</a>

Вот еще некоторая информация, которая может помочь. urls.py

(r'^clients/(?P<client_id>\d+)/$', views.get_client),
(r'^clients/notes/(?P<client_id>\d+)(?P<note_id>\d+)$', views.edit_notes),

views.py

@login_required
def edit_notes(request, client_id = 0, note_id = 0):
    client = None
    note = None
    try:
        client = models.Client.objects.get(pk = client_id)
        note = models.Note.objects.get(pk = note_id)
    except:
        return HttpResponseNotFound()

    if request.method == 'POST':
        form = forms.NoteForm(request.POST, instance=note)
        if form.is_valid():
            note = form.save(commit=False)
            note.user = request.user
            note.client = client
            note.save(True)
            request.user.message_set.create(message = "Note is successfully added.")
            return HttpResponse("<script language=\"javascript\" type=\"text/javascript\">window.opener.location = window.opener.location; window.close();</script>")
    else:
        form = forms.NoteForm(instance=note)

    return render_to_response('note_form.html', {'form':form, 'client':client, 'note':note}, context_instance = RequestContext(request))

* РЕДАКТИРОВАТЬ: * Кажется, исправил большую часть этого Вот некоторые изменения, которые я сделал.

Template

{% for note in notes %}
        <a href="{% url mmc.views.edit_note client.pk note.pk  %}" onclick="return showAddAnotherPopup(this);"> Edit Note</a>
{% endfor%}

urls.py

(r'^clients/notes/(?P<client_id>\d+)/(?P<note_id>\d+)/$', views.edit_note)

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

Ответы [ 2 ]

1 голос
/ 28 июня 2011

client.pk и note.pk - пустые значения, поэтому они не соответствуют регулярному выражению.

0 голосов
/ 28 июня 2011

(r'^clients/(?P<client_id>\d+)/$', views.get_client) должно быть что-то вроде url(r'^clients/(?P<client_id>\d+)/$', views.get_client, name='MY_URL_NAME'), затем вызывается с {% url MY_URL_NAME client.pk %}

и импорт url из django.conf.urls.defaults

...