Соответствие шаблону URL в django - PullRequest
3 голосов
/ 25 августа 2011

Я получаю страницу не найдена, когда пытаюсь получить доступ к http://127.0.0.7:8000/edit-paragraph/6/edit/, со следующей ошибкой:

Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:
^admin/
^login/$
^login/home/
^logout/$
^edit-section/(?P<s_id>\d+)/edit/
^edit-section/(?P<s_id>\d+)
^edit-paragraph/(?P<p_id>\d+)/edit/
The current URL, edit-paragraph/6/, didn't match any of these.

В моем urls.py у меня есть:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    (r'^login/$', 'mysite.auth.views.login_user'),
    (r'^login/home/', 'mysite.auth.views.logged_in'),
    (r'^logout/$', 'mysite.auth.views.logout_user'),
    (r'^edit-section/(?P<s_id>\d+)/edit/', 'mysite.auth.views.edit_section_form'),
    (r'^edit-section/(?P<s_id>\d+)', 'mysite.auth.views.edit_section'),
    (r'^edit-paragraph/(?P<p_id>\d+)/edit/', 'mysite.auth.views.edit_paragraph')

)

Мне ясно, что URL http://127.0.0.7:8000/edit-paragraph/6/edit/ должен соответствовать последней строке моего URLConf.Есть идеи, что я делаю не так?Он может соответствовать аналогичным URL:

r'^edit-section/(?P<s_id>\d+)/edit/'

Заранее спасибо!


РЕДАКТИРОВАТЬ:

Оказывается, это было перенаправление.Теперь у меня есть это, и браузер выдает ошибку «Страница не найдена»:

@login_required
def edit_paragraph(request, p_id):
p = get_object_or_404(Paragraph, id=p_id)

if request.method == 'POST':
    form = ParagraphForm(request.POST)
    if form.is_valid():
        p.title = request.POST['title']
        p.description = request.POST['description']
        p.save()
        return HttpResponse('foo')
    else:
        form = ParagraphForm({ 'title': p.title, 'description': p.description })
        return render_to_response('auth/edit-paragraph.html', { 'form': form }, context_instance=RequestContext(request))

return HttpResponseRedirect('/edit-paragraph/'+p_id+'/edit/')

РЕДАКТИРОВАТЬ - Решено:

Вот исправление, которое я придумал, чтобы избежать бесконечных циклов,и любые другие проблемы возникали:

@login_required
def edit_paragraph(request, p_id):
    p = get_object_or_404(Paragraph, id=p_id)
    form = ParagraphForm({ 'title': p.title, 'description': p.description })

    if request.method == 'POST':
        form = ParagraphForm(request.POST)
        if form.is_valid():
            p.title = request.POST['title']
            p.description = request.POST['description']
            p.save()
            return HttpResponseRedirect('/login/home')

    return render_to_response('auth/edit-paragraph.html', { 'form': form }, context_instance=RequestContext(request))

1 Ответ

0 голосов
/ 25 августа 2011

Пара вещей:

  1. Если вы перенаправлены, убедитесь, что вы действительно перенаправлены, и дело не только в том, что ваш браузер слишком полезен функцией автозаполнения URL.
    Инструменты вашего веб-разработчика (firebug, веб-инспектор и т. д.) будут регистрировать перенаправление, если это произойдет.
    Многие браузеры ведут себя странно по следу /. Вы можете проверить это, запустив свой dev-сервер на порту, к которому ваш браузер ранее не обращался (то есть manage.py runserver 8001), а затем повторите попытку.

  2. Если вы нажмете исключение где-то внутри или перед вашим urls.py (или функцией просмотра), возможно, что шаблон URL фактически не оценивается, поэтому django думает, что у вас 404. В вашем случае, похоже, этого не происходит, потому что django сказал вам, какие URL он проверяет. Однако вы можете попробовать импортировать файлы settings.py, urls.py и views.py в консоль и попробовать запустить функцию просмотра напрямую и убедиться, что вы не получите исключение.

...