django - 我得到了错误。NoReverseMatch at /delete_mat/11/ 在 Django 的一个应用程序中
问题描述
万岁开发者。我在现有的 Django 项目中创建了第二个应用程序。应用程序中的 urls.py 路由工作正常,但视图 edit_mat、update_mat 和 delete_mat,尽管执行了操作仍访问数据库,但不会重新加载索引页面。我不访问数据库的视图工作得很好。不知道还能做什么。你能帮我吗?
错误:
NoReverseMatch at /delete_mat/11/
Reverse for 'material' not found. 'material' is not a valid view function or pattern name.
Request Method: GET
Request URL: http://127.0.0.1:8000/delete_mat/11/
Django Version: 3.2
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'material' not found. 'material' is not a valid view function or pattern name.
Exception Location: C:\webcq\venv\lib\site-packages\django\urls\resolvers.py, line 694, in _reverse_with_prefix
Python Executable: C:\webcq\venv\Scripts\python.exe
Python Version: 3.8.6
Python Path:
['C:\\webcq',
'C:\\Users\\Lewis\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip',
'C:\\Users\\Lewis\\\AppData\\Local\\Programs\\Python\\Python38\\DLLs',
'C:\\Users\\Lewis\\\AppData\\Local\\Programs\\Python\\Python38\\lib',
'C:\\Users\\Lewis\\\AppData\\Local\\Programs\\Python\\Python38',
'C:\\webcq\\venv',
'C:\\webcq\\venv\\lib\\site-packages']
Server time: Mon, 17 May 2021 21:27:15 +0000
Traceback Switch to copy-and-paste view
C:\webcq\venv\lib\site-packages\django\core\handlers\exception.py, line 47, in inner
response = get_response(request) …
▶ Local vars
C:\webcq\venv\lib\site-packages\django\core\handlers\base.py, line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs) …
▶ Local vars
C:\webcq\materiais\views.py, line 49, in delete_mat
return redirect('material') …
▶ Local vars
view.py 应用程序
from django.shortcuts import render, redirect
from materiais.models import EspecComponentes, Componente, Codigo, EspecMaterial
from materiais.forms import EspecComponentesForm
# Create your views here.
...
def create_mat(request):
form_mat = EspecComponentesForm(request.POST or None)
if form_mat.is_valid():
form_mat.save()
return redirect('material')
def view_mat(request, pk):
data = {}
data['db'] = EspecComponentes.objects.get(pk=pk)
return render(request, 'materiais/view.html', data)
def edit_mat(request, pk):
data = {}
data['db'] = EspecComponentes.objects.get(pk=pk)
data['form_mat'] = EspecComponentesForm(instance=data['db'])
return render(request, 'materiais/form.html', data)
def update_mat(request, pk):
data = {}
data['db'] = EspecComponentes.objects.get(pk=pk)
form_mat = EspecComponentesForm(request.POST or None, instance=data['db'])
if form_mat.is_valid():
form_mat.save()
return redirect('material')
def delete_mat(request, pk):
db = EspecComponentes.objects.get(pk=pk)
db.delete()
return redirect('material')
urls.py 应用程序
from django.contrib import admin
from django.urls import path
from . import views
app_name = 'materiais'
urlpatterns = [
#ok path('material/', views.material, name='material'),
#ok path('form_mat/', views.form_mat, name='form_mat'),
path('create_mat/', views.create_mat, name='create_mat'),
path('view_mat/<int:pk>/', views.view_mat, name='view_mat'),
path('edit_mat/<int:pk>/', views.edit_mat, name='edit_mat'),
path('update_mat/<int:pk>/', views.update_mat, name='update_mat'),
path('delete_mat/<int:pk>/', views.delete_mat, name='delete_mat'),
]
视图工作,但不重定向到视图名称并返回错误:NoReverseMatch at /edit_mat/11/ NoReverseMatch at /update_mat/11/ NoReverseMatch at /delete_mat/11/
urls.py 项目
from django.urls import include, path
from imagem.views import home, form, create, view, projeto, edit, update, delete
from materiais.views import material, form_mat, create_mat, view_mat, edit_mat, update_mat, delete_mat
urlpatterns = [
... urls project... ok
#App Materiais
path('', include('materiais.urls', namespace='material')),
path('form_mat/', include('materiais.urls', namespace='form_mat')),
path('create_mat/', include('materiais.urls', namespace='create_mat')),
path('view_mat/<int:pk>/', include('materiais.urls', namespace='view_mat')),
path('edit_mat/<int:pk>/', include('materiais.urls', namespace='edit_mat')),
path('update_mat/<int:pk>/', include('materiais.urls', namespace='update_mat')),
path('delete_mat/<int:pk>/', include('materiais.urls', namespace='delete_mat')),
]
表单.html
<tbody>
{% for dbs in db %}
<td>
<th>{{dbs.id}}</th>
<td>{{dbs.espec_name}}</td>
<td>{{dbs.codigo}}</td>
<td>{{dbs.espec_material}}</td>
<td>{{dbs.diametro1}}</td>
<td>{{dbs.diametro2}}</td>
<td>{{dbs.peso}}</td>
<td>
<a href="/view_mat/{{dbs.id}}/" class="btn btn-dark">Visualizar</a>
<a href="/edit_mat/{{dbs.id}}/" class="btn btn-primary">Editar</a>
<a href="/delete_mat/{{dbs.id}}/" class="btn btn-danger btnDel">Deletar</a>
</td>
</tr>
{% endfor %}
</tbody>
解决方案
You need to use redirect('material:material')
in your views. Which is <app name>:<url namespace>
推荐阅读
- python - 将 StringVar 值转换为列表
- python - 如何消除 PySpark DataFrame 列中条目的第一个字符?
- matlab - 如何在分组栏中绘制误差线?
- r - 如何从公式中读取值(在未保存的 excel 文件中)
- flutter - 关闭键盘时从 TextField 中移除焦点
- python - 内核似乎已经死了 - Jupyter notebook python matplotlib
- python - 为什么 LSTM 预测值低?
- c# - 在 c# / ASP.NET MVC 中获取本地和服务器的 CPU 和 ram 利用率
- javascript - Discord JS命令未处理
- android-studio - 来自 .json 的颤振下拉列表