首页 > 解决方案 > 未找到“结果”的反向。“结果”不是有效的视图函数或模式名称

问题描述

我对编程真的很陌生,但是我一直在做一个 Django 项目。我正在为用户创建一种在网站上创建帖子的方式,但是我收到以下错误:

Internal Server Error: /
Traceback (most recent call last):
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\dylan\homemade\blog\views.py", line 46, in home_view
    return render(request, 'home.html', context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\shortcuts.py", line 19, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\backends\django.py", line 61, in render
    return self.template.render(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py", line 171, in render
    return self._render(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py", line 163, in _render
    return self.nodelist.render(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py", line 163, in _render
    return self.nodelist.render(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\defaulttags.py", line 443, in render
    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\urls\base.py", line 87, in reverse
    return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
  File "C:\Users\dylan\AppData\Local\Programs\Python\Python38\lib\site-packages\django\urls\resolvers.py", line 677, in _reverse_with_prefix
    raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'post_create_view' not found. 'post_create_view' is not a valid view function or pattern name.

这是我的models.py:

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_delete, pre_save
from django.dispatch import receiver
from django.utils.text import slugify
from django.conf import settings


def upload_location(instance, filename):
    file_path = 'media/{author_id}/{title}-{filename}'.format(
    author_id=str(instance.author_id), title=str(instance.title), filename=filename
    )
    return file_path

class BlogPost(models.Model):
    title = models.CharField(max_length=50, null=False, blank=False)
    description = models.CharField(max_length=500, null=False, blank=False)
    image = models.ImageField(upload_to=upload_location, null=False, blank=False)
    date_published = models.DateTimeField(auto_now_add=True, verbose_name="date published")
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    slug = models.SlugField(blank=True, unique=True)

    def __str__(self):
        return self.title

@receiver(post_delete, sender=BlogPost)
def submission_delete(sender, instance, **kwargs):
    instance.image.delete(False)

def pre_save_post_reciever(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = slugify(instance.author.username + "-" + instance.title)

pre_save.connect(pre_save_post_reciever, sender=BlogPost)

这是我的views.py:

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import BlogPost
from .forms import PostForm
from django.views.generic import ListView
from users.models import Profile_Create


# Create your views here.

def post_create_view(request):
    context = {}

    user = request.user
    if not user.is_authenticated:
        return redirect('login')

    form = PostForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        obj = form.save(commit=False)
        author = Profile_Create.objects.filter(email=user.email).first()
        obj.author = author
        obj.save()
        form = PostForm()

    context = {
        'form' : form
    }

    return render(request, 'post_create_view.html', context)



class PostListView(ListView):
    model = BlogPost
    template_name = 'post_detail.html'
    context_object_name = 'posts'




def home_view(request, *args, **kwargs):
    context = {
        "posts" : BlogPost.objects.all()
    }
    return render(request, 'home.html', context)

def post_detail_view(request):
    obj = BlogPost.objects.get(id=2)
    context = {
        'object' : obj,
        'posts' : BlogPost.objects.all()
    }
    return render(request, "post_detail.html", context)

这是我的 URL's.py:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib import admin
from django.urls import path
from blog.views import home_view
from blog.views import post_detail_view
from blog.views import post_create_view
from users.views import register_view
from users.views import login_view, logout_view
from users.views import navbar_view
from blog.views import PostListView
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('logout/', logout_view, name='logout' ),
    path('list/', PostListView.as_view(), name='post_list'),
    path('navbar/', navbar_view, name='navbar'),
    path('login/', login_view, name='login'),
    path('post-create/', post_create_view, name='post_create'),
    path('posts/', post_detail_view, name='posts'),
    path('', home_view, name='home'),
    path('admin/', admin.site.urls),
    path('register/', register_view, name='register')

]

我可以尝试什么来解决这个问题?

标签: pythonpython-3.xdjangopython-2.7

解决方案


post_create_view如果您注意到,您的urls.py中没有名称路径

您需要更改路径中的条目url patterns

name='post_create'-->name='post_create_view'

像这样:

path('post-create/', post_create_view, name='post_create_view'),

推荐阅读