【问题标题】:Reverse for 'projeto' with no arguments not found. 1 pattern(s) tried: ['delete/(?P<pk>[0-9]+)/projeto/$']未找到任何参数的“projeto”反向。尝试了 1 种模式:['delete/(?P<pk>[0-9]+)/projeto/$']
【发布时间】:2021-08-10 04:01:35
【问题描述】:

向开发者致敬。我有一个应用程序,在索引中我使用表字段之间的 ForeignKey 调用一些查询,使用 User 作为参数。这些视图适用于没有 ForeignKey 的其他表。但是当我调用请求数据库的 CRUD(删除、更新、创建)函数时,它会返回一个错误:

Request Method: GET
Request URL:    http://127.0.0.1:8000/delete/13/
Django Version: 3.2
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'projeto' with no arguments not found. 1 pattern(s) tried: ['delete/(?P<pk>[0-9]+)/projeto/$']
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:\\webcq\\venv',
 'C:\\webcq\\venv\\lib\\site-packages']
Server time:    Thu, 20 May 2021 21:03:07 +0000

url.py 项目

from django.contrib import admin
from django.urls import include, path


urlpatterns = [


    path('admin/', admin.site.urls),
    path('', include('imagem.urls', namespace='home')),
    path('view/<int:pk>/', include('imagem.urls', namespace='view')),
    path('edit/<int:pk>/', include('imagem.urls', namespace='edit')),
    path('update/<int:pk>/', include('imagem.urls', namespace='update')),
    path('delete/<int:pk>/', include('imagem.urls', namespace='delete')),


]

urls.py 应用程序

from django.urls import path
from . import views

app_name = 'imagem'

urlpatterns = [

    path('', views.home, name='home'),
    path('projeto/', views.projeto, name='projeto'),
    path('form/', views.form, name='form'),
    path('create/', views.create, name='create'),
    path('view/<int:pk>/', views.view, name='view'),
    path('edit/<int:pk>/', views.edit, name='edit'),
    path('update/<int:pk>/', views.update, name='update'),
    path('delete/<int:pk>/', views.delete, name='delete'),

]

views.py 应用程序

视图工作,但不重定向到视图名称并返回上述错误。



def edit(request, pk):
    data = {}
    data['db'] = Projeto.objects.get(pk=pk)
    data['form'] = ProjetoForm(instance=data['db'])
    return render(request, 'imagem/form.html', data)

def update(request, pk):
    data = {}
    data['db'] = Projeto.objects.get(pk=pk)
    form = ProjetoForm(request.POST or None, instance=data['db'])
    if form.is_valid():
        form.save()
        return redirect('imagem:projeto')

def delete(request, pk):
    db = Projeto.objects.get(pk=pk)
    db.delete()
    return redirect('imagem:projeto')

form.html

          {% for dbs in db %}

            <td>
               <th>{{dbs.id}}</th>
                <td>{{dbs.nome}}</td>
                <td>{{dbs.tipo_img}}</td>
                <td>
                      <a href="/view/{{dbs.id}}/" class="btn btn-dark">Visualizar</a>
                      <a href="/edit/{{dbs.id}}/" class="btn btn-primary">Editar</a>
                      <a href="/delete/{{dbs.id}}/" class="btn btn-danger btnDel">Deletar</a>
                </td>
            </tr>
            {% endfor %}

models.py 应用程序

class Projeto(models.Model):
    tipo_img = models.ForeignKey(TipoImg, on_delete=models.CASCADE)
    nome = models.CharField(max_length=200)
    autor = models.ForeignKey(User, on_delete=models.CASCADE, default='1')

    def __str__(self):
        return self.nome

【问题讨论】:

    标签: python django user-interface view foreign-keys


    【解决方案1】:

    由于projetoimagem url 中,它是从urls.py 调用的,名称空间为“home”,我相信您想在视图中使用return redirect('home:projeto')(而不是“imagem:projeto”) )。

    您可能还想从 url 中删除“视图”、“编辑”、“更新”和“删除”,因为您在 imagem 中也有(或从 imagem 中删除)。

    您的第一个url.py 应该是:

    from django.contrib import admin
    from django.urls import include, path
    
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('imagem.urls', namespace='home')),
     ] 
    

    对于未来的自己,您可能希望将根 url 文件命名为 urls.py;其他urls.py 通常会存在于他们自己的应用文件夹中。

    所以会产生这样的文件结构:

    project_name/project_name/settings.py
    project_name/project_name/urls.py
    project_name/imagem/urls.py
    project_name/imagem/views.py
    project_name/imagem/models.py
    

    【讨论】:

    • 感谢 DMG。这真的是我需要的。我会按照建议重做路线。再次感谢您!
    猜你喜欢
    • 2020-05-13
    • 2019-02-07
    • 2019-11-18
    • 2019-09-07
    • 2021-12-12
    • 2020-10-21
    • 2022-01-13
    • 2020-11-06
    • 2021-06-13
    相关资源
    最近更新 更多