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

Posted

技术标签:

【中文标题】我得到了错误。 NoReverseMatch at /delete_mat/11/ 在 Django 的一个应用程序中【英文标题】:I get the error. NoReverseMatch at /delete_mat/11/ in one of the apps in Django 【发布时间】:2021-08-07 04:22:17 【问题描述】:

向开发者致敬。我在现有的 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'),

]

视图工作,但不重定向到视图名称并返回错误: /edit_mat/11/ 处的 NoReverseMatch /update_mat/11/ 处的 NoReverseMatch /delete_mat/11/ 处的 NoReverseMatch

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')),

]

form.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>

【问题讨论】:

我相信this answer 会帮助你。让我知道它是否有效。 是的,它奏效了。该对象被错误地声明。谢谢你。没问题! 【参考方案1】:

您需要在视图中使用redirect('material:material')。这是&lt;app name&gt;:&lt;url namespace&gt;

【讨论】:

是的,它奏效了。该对象被错误地声明。谢谢你。没问题!

以上是关于我得到了错误。 NoReverseMatch at /delete_mat/11/ 在 Django 的一个应用程序中的主要内容,如果未能解决你的问题,请参考以下文章

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

我不知道我的错误是啥意思: NoReverseMatch at /sssss/ Reverse for '' with arguments '(9, 19)' and keyword argument

NoReverseMatch at / posts / post / 18 / comment / Django Error

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

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

NoReverseMatch at ...... in django