python - 未找到“结果”的反向。“结果”不是有效的视图函数或模式名称
问题描述
我对编程真的很陌生,但是我一直在做一个 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')
]
我可以尝试什么来解决这个问题?
解决方案
post_create_view
如果您注意到,您的urls.py中没有名称路径
您需要更改路径中的条目url patterns
name='post_create'
-->name='post_create_view'
像这样:
path('post-create/', post_create_view, name='post_create_view'),
推荐阅读
- java - Java中的Gson Json解析
- snowflake-cloud-data-platform - 从 Parquet 加载数据时雪花“超出最大 LOB 大小 (16777216)”错误
- reporting-services - SSRS 通过 URL 调用页脚中的子报表
- reactjs - 有没有更好的方法来编写此检查以查看反应中的道具上是否存在值?
- hamcrest - Hamcrest 定位器浓缩咖啡
- ios - 对齐文本与填充SwiftUI
- webpack - Next.js Sentry Sourcemap 大小过大
- python-3.x - tox 不运行狮身人面像
- django - 在 Django 中显示用户对帖子的评论
- ios - 我试图在不使用情节提要的情况下使用 swift (Xcode) 将标题部分添加到我的个人资料页面