Django NoReverseMatch at / 路径名和/或顺序是不是冲突?

Posted

技术标签:

【中文标题】Django NoReverseMatch at / 路径名和/或顺序是不是冲突?【英文标题】:Django NoReverseMatch at / is it conflicting path names and or order?Django NoReverseMatch at / 路径名和/或顺序是否冲突? 【发布时间】:2020-12-22 22:56:04 【问题描述】:

您好,我正在尝试向我的 django url 模式添加一个编辑页面,一旦我单击页面上的一个链接,该页面就会给我一个错误,系统崩溃,并且我收到来自系统。如果我确实将编辑路径与输入路径交换,那么它确实可以工作,但这不是我希望它工作的方式。我希望用户首先看到入口页面,然后能够单击编辑按钮来编辑页面。以下是我的观点和一些html页面。

django 新手并查看了文档,但没有找到任何东西。谢谢你的帮助

下面也是错误:

error - Reverse for 'edit' with arguments '('# Django\r\n\r\nDjango 是一个使用Python 编写的Web 框架,允许设计动态生成HTML 的Web 应用程序。\ r\n',)' 未找到。尝试了 1 种模式:['(?P[^/]+)$']

urls.py:

from django.urls import path

from . import views

app_name = "enc"
urlpatterns = [
    path("", views.index, name="index"),
    path("new_page", views.new_page,name="check_page"),
    path("",views.get_search,name="search"),
    path("<str:title>",views.entry, name="page"),
    path("<str:title>",views.edit, name ="edit"),
    
]

views.py

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from . import util


entries = 

def index(request):
    return render(request, "encyclopedia/index.html", 
        "entries": util.list_entries()
    )


def entry(request, title):
    if util.get_entry(title):
        return render(request,"encyclopedia/entry.html", 
            "title": util.get_entry(title),
            "name":title
        )
    
    else:
        return render(request, "encyclopedia/error.html")

def get_search(request):
    if request.method == 'GET':
        form = util.search_form(request.GET['q'])
        
        if form.is_valid():
            search  = form.cleaned_data["search"]
            return render(request, "encyclopedia/entry.html",
                "search":util.get_entry(search)
            )

def new_page (request):
    if request.method == 'POST':
        form = util.new_entry(request.POST)

        if form.is_valid():
            title = form.cleaned_data['title']
            details = form.cleaned_data['details']

            if title in entries:
                return render (request, "encyclopedia/error.html")
            
            else:
                util.save_entry(title, details)
                entries[title] = details
                return HttpResponseRedirect(f'title')


    return render(request, "encyclopedia/new_page.html",
        "form": util.new_entry()
    )



def edit (request,title):
    
    entry = util.get_entry(title)

    if entry == None:
        return render(request, "encyclopedia/error.html")

    else:

        form = util.edit(initial='title':title, 'details':entry)


        return render (request, "encyclopedia/edit.html", 
            "form": form,
            'title': title,
            'details':util.get_entry(title),
         )

用于编辑的html:

% extends "encyclopedia/layout.html" %

% block title %
    Encyclopedia
% endblock %

% block body %

    <form action="% url 'enc:edit' title %" method="POST">
        % csrf_token %
         form.as_p 
        <input type="submit">
    </form>

% endblock %

进入的html


% block title %
    name
% endblock %

% block body %

    <p>title</p>

    <a href="% url 'enc:index' %">Go back to main page</a>
    <a href="% url 'enc:edit' title %">Click here to edit the page</a>

% endblock %


【问题讨论】:

【参考方案1】:

如果两个视图的路径相同,Django 会抛出错误。 试试这个来解决问题。

urlpatterns = [
    path("", views.index, name="index"),
    path("new_page/", views.new_page,name="check_page"),
    path("search/",views.get_search,name="search"),
    path("new/<str:title>/",views.entry, name="page"),
    path("edit/<str:title>/",views.edit, name ="edit"),
    
]

注意 / 正斜杠

【讨论】:

感谢您在更改为上述内容后的评论我收到一个新错误,说 404 page is page not found request method get..

以上是关于Django NoReverseMatch at / 路径名和/或顺序是不是冲突?的主要内容,如果未能解决你的问题,请参考以下文章

NoReverseMatch at /accounts/password-reset/ 用于 Django 中的密码重置

Django NoReverseMatch at / 路径名和/或顺序是不是冲突?

Django 1.10.2 错误“NoReverseMatch at”,“未找到带有参数 '()' 和关键字参数 '' 的 'django.contrib.auth.views.login' 的反向。

我得到了错误。 NoReverseMatch at /delete_mat/11/ 在 Django 的一个应用程序中

NoReverseMatch at /, u'opts|admin_urlname' 不是已注册的命名空间 Django 1.4.1

NoReverseMatch at / 实现注释选项时出错