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