Skip to main content
 首页 » 编程设计

python之表单重定向中的 Django NoReverseMatch

2024年08月25日25sxdcgaq8080

我收到以下错误:

NoReverseMatch at /lld/new/ 
 
Reverse for 'display_lld' with arguments '()' and  
keyword arguments '{'slug': u'stack-overflow-new-document'}' not found. 
0 pattern(s) tried: [] 

虽然我认为它与我的 url 正则表达式或传递给 index.html< 的 document.slug 变量有关,但我无法深入了解它 views.py 中的模板。

views.py:

from django.shortcuts import get_object_or_404, render, redirect 
 
from .models import Document 
from .forms import DocumentForm 
 
 
def index(request): 
    document_list = Document.objects.order_by('-date_updated') 
    context = {'document_list': document_list} 
    return render(request, 'lld/index.html', context) 
 
 
def display_lld(request, slug): 
    document = get_object_or_404(Document, slug=slug) 
    return render(request, 'lld/display_lld.html', {'document': document}) 
 
 
def new_lld(request): 
    if request.method == "POST": 
        form = DocumentForm(request.POST) 
        if form.is_valid(): 
            document = form.save(commit=False) 
            document.save() 
            return redirect('display_lld', slug=document.slug) 
    else: 
        form = DocumentForm() 
    return render(request, 'lld/new_lld.html', {'form': form}) 

网站 urls.py:

urlpatterns = [ 
    url(r'^lld/', include('lld.urls', namespace="lld")), 
    url(r'^admin/', include(admin.site.urls)), 
] 

应用 urls.py:

from django.conf.urls import url 
 
from . import views 
 
urlpatterns = [ 
    # example: /lld/ 
    url(r'^$', views.index, name='index'), 
    # example: /lld/new/ 
    url(r'^new/$', views.new_lld, name='new_lld'), 
    # ex: /lld/customername-projectname/ 
    url(r'^(?P<slug>([\w-]+))/', views.display_lld, name='display_lld'), 
] 

index.html:

{% if document_list %} 
    <ul> 
    {% for document in document_list %} 
        <li><a href="{% url 'lld:display_lld' document.slug %}">{{ document.customer }} / {{ document.title }}</a></li> 
    {% endfor %} 
    </ul> 
{% else %} 
    <p>No documents are available.</p> 
{% endif %} 
<a href="{% url 'lld:new_lld' %}">Create New LLD</a> 

该表单很好地创建了新文档,它显示在管理员中。但是,当我单击表单保存按钮时,它会显示 NoReverseMatch 错误,而不是重定向回创建的文档。新创建的文档列在索引页上,我可以通过单击那里的链接导航到它,它似乎只是在表单重定向中抛出错误。

请您参考如下方法:

当调用 redirect 时,您遗漏了 lld 命名空间。使用 redirect 或 reverse 时需要包含命名空间,就像使用 {% url %} 时一样模板中的标记:

return redirect('lld:display_lld', slug=document.slug)