我在views.py文件中有一个有效的视图,但仍然出现错误“无效的视图功能”

时间:2019-01-13 12:27:59

标签: django django-models django-forms

我正在使用Django 2.1 `

from django.shortcuts import render,redirect,get_object_or_404
from .forms import PostUrl
from .models import UrlLink

def total_url(request):
    urls=UrlLink.objects.all()
    return render(request,'core/shorturl.html',{'urls':urls})

def url_list(request,pk):
    url = get_object_or_404(UrlLink,pk=pk)
    return render(request,'core/url_detail.html',{'url':url})


def url_new(request):
    if request.method == "POST":
        form=PostUrl(request.POST)
        if form.is_valid():
            url=form.save()
            return redirect('total_url')
    else:
        form=PostUrl()
        return render(request,'core/url_list.html',{'form':form})

`

但是当我提交表格时我得到了错误 NoReverseMatch位于/ 找不到“ total_url”的反向按钮。 “ total_url”不是有效的视图函数或模式名称。

这是我的网址文件 `

from django.urls import path
from . import views

urlpatterns=[
    path('',views.url_new,name='url_list'),
    path('<int:pk>/',views.url_list,name='url_detail'),
    path('all/',views.total_url,name='totalUrl')
]

`

2 个答案:

答案 0 :(得分:1)

Django重定向可以采用:

  1. 将调用模型的get_absolute_url()函数。
  2. 视图名称,可能带有参数:reverse()将用于反向解析名称。
  3. 绝对或相对URL,将按原样用作重定向位置。

很明显,您使用的是视图名称,这里的问题是您需要在URLPatterns中指定视图名称,但不能直接使用视图函数作为视图名称。

例如: path('books /',views.BookListView.as_view(),name ='books'),在这种情况下,此处的视图名称为'books'。

答案 1 :(得分:0)

您的视图名称是totalUrl,而不是total_url