django中的URL模式匹配

时间:2011-08-25 18:24:33

标签: python django urlconf

当我尝试访问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')

对我来说,显然网址http://127.0.0.7:8000/edit-paragraph/6/edit/应该与我的URLConf的最后一行匹配。关于我做错了什么的任何想法?它能够匹配相似的网址:

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

提前致谢!


编辑:

事实证明它是重定向的。现在我有了这个,浏览器发出了一个Page not found错误:

@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 :(得分:0)

有几件事:

  1. 如果您正在被重定向,请确保您实际上被重定向,并且不仅仅是因为您的浏览器对其自动填充功能的帮助太大了。
    您的Web开发人员工具(firebug,Web检查员等)将记录重定向(如果发生的话) 许多浏览器在尾随/周围都有奇怪的行为。您可以通过在您的浏览器之前未访问的端口(即manage.py runserver 8001)上运行您的开发服务器来检查此项,然后再次尝试。

  2. 如果您在urls.py(或您的查看功能)之前或之前的某个地方遇到异常,则可能实际上没有对该网址模式进行评估,因此django认为您有404。在您的这种情况似乎没有发生,因为django告诉你它正在检查哪些网址。但是,您可以尝试在控制台中导入settings.pyurls.pyviews.py文件,并尝试直接运行查看功能,并确保没有异常。