问题描述
我正在跟踪教程(这是两年前的,所以他们使用的是django和python的旧版本),我完成了博客,一切正常,可以注册,登录,发布新论坛,但是当我单击以查看已经创建的博客文章时,出现以下错误。总体而言,我不确定问题出在哪里,是否在_post.html,views.py,models.py urls.py中?
TemplateDoesNotExist at /groups/posts/in/first-post/ post/_post.html
在原子编辑器中,我收到此错误:
"GET /groups/posts/in/first-post/ HTTP/1.1" 500 198549
Atom文本编辑器中的错误进一步说明:
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/backends/django.py",line 84,in reraise
raise new from exc
django.template.exceptions.TemplateDoesNotExist: post/_post.html
[05/Oct/2020 06:02:06] "GET /groups/posts/in/first-postit/ HTTP/1.1" 500 198648
因此,我认为问题在于它正在寻找“ post / _post.html”,因为它实际上在posts / _post.html中-但是我不知道这个错误在哪里,它只是说“ 84行,正在重新筹款”
这是我的base.html:
<!DOCTYPE html>
{% load static %}
<html>
<head>
<Meta charset="utf-8">
<title>Star Social</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1irsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
{# NOTE: To use the static,you must put the loadstatic files at the beggining #}
<link rel="stylesheet" href="{% static 'simplesocial/css/master.css' %}">
</head>
<body>
{# mynav is my own class to setup my css#}
<nav class="navbar mynav" role="navigation" id="navbar">
<div class="container">
<a class="navbar-brand mynav" href="{% url 'home' %}">Star Social</a>
<ul class="nav navbar-nav navbar-right">
{% if user.is_authenticated %}
<li><a href="{% url 'posts:create' %}">Post</a></li>
<li><a href="{% url 'groups:all' %}">Groups</a></li>
<li><a href="{% url 'groups:create' %}">Create group</a></li>
<li><a href="{% url 'accounts:logout' %}">logout</a></li>
{% else %}
<li><a href="{% url 'groups:all' %}" class="btn btn-simple">Groups</a></li>
<li><a href="{% url 'accounts:login' %}" class="btn btn-simple">Log in</a></li>
<li><a href="{% url 'accounts:signup' %}" class="btn btn-simple">Sign Up</a></li>
{% endif %}
</ul>
</div>
</nav>
<div class="container mycontent">
{% block content %}
{% endblock %}
</div>
</body>
<script type="text/javascript" src="{% static 'simplesocial/js/master.js' %}"></script>
</html>
posts文件夹中的urls.py:
from django.conf.urls import url
from posts import views
app_name = 'posts'
urlpatterns = [
url(r'^$',views.PostList.as_view(),name='all'),url(r'^new/$',views.CreatePost.as_view(),name='create'),url(r'^by/(?P<username>[-\w]+)/$',views.UserPosts.as_view(),name='for_user'),url(r'^by/(?P<username>[-\w]+)/(?P<pk>\d+)/$',views.PostDetail.as_view(),name='single'),url(r'^delete/(?P<pk>\d+)/$',views.DeletePost.as_view(),name='delete'),]
这是posts文件夹中的views.py:
from django.shortcuts import render
# POSTS VIEWS.PY
# Create your views here.
from django.contrib.auth.mixins import LoginrequiredMixin
from django.urls import reverse_lazy
from django.contrib import messages
from django.http import Http404
from django.views import generic
from braces.views import SelectRelatedMixin
from posts import models
from posts import forms
from django.contrib.auth import get_user_model
User = get_user_model() #if someone is logged into a session I am able to use
#this User object to get acces to the active user.
class PostList(SelectRelatedMixin,generic.ListView):
model = models.Post
select_related = ('user','group')
class UserPosts(generic.ListView):
model = models.Post
template_name = 'posts/user_post_list.html'
def get_queryset(self):
try:
self.post_user = User.objects.prefetch_related('posts').get(username__iexact=self.kwargs.get('username'))
except User.DoesNotExist:
raise Http404
else:
return self.post_user.posts.all()
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context['post_user'] = self.post_user
return context
class PostDetail(SelectRelatedMixin,generic.DetailView):
model = models.Post
select_related = ('user','group')
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(user__username__iexact=self.kwargs.get('username'))
class CreatePost(LoginrequiredMixin,SelectRelatedMixin,generic.CreateView):
fields = ('message','group')
model = models.Post
def form_valid(self,form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return super().form_valid(form)
class DeletePost(LoginrequiredMixin,generic.DeleteView):
model = models.Post
select_related = ('user','group')
success_url = reverse_lazy('posts:all')
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(user_id=self.request.user.id)
def delete(self,*args,**kwargs):
messages.success(self.request,"Post Deleted")
return super().delete(*args,**kwargs)
models.py;
from django.db import models
from django.urls import reverse
from django.conf import settings
import misaka
from groups.models import Group
# Create your models here.
# POSTS MODELS.PY
from django.contrib.auth import get_user_model
User = get_user_model()
class Post(models.Model):
user = models.ForeignKey(User,related_name='posts',on_delete= models.CASCADE)
created_at = models.DateTimeField(auto_Now=True) # Create_at is the creation date
message = models.TextField()
message_html = models.TextField(editable=False)
group = models.ForeignKey(Group,null=True,blank=True,on_delete= models.CASCADE)
def __str__(self):
return self.message
def save(self,**kwargs):
# That way,if someone puts a link in their post,it won't show as brackets
#and all that machine representation. It will show as a true html
self.message_html = misaka.html(self.message)
super().save(*args,**kwargs)
def get_absolute_url(self):
return reverse('posts:single',kwargs={'username':self.user.username,'pk':self.pk})
class Meta:
ordering = ['-created_at'] # the '-' is to be in descending order. The newer first
unique_together = ['user','message'] #Every message is uniquely linkd to the user
这是回溯
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/groups/posts/in/first-post/
Django Version: 3.1.1
Python Version: 3.8.3
Installed Applications:
['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','bootstrap3','accounts','groups','posts']
Installed Middleware:
['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware']
Template loader postmortem
Django tried loading these templates,in this order:
Using engine django:
This engine did not provide a list of tried templates.
Template error:
In template /Users/Homepage/Desktop/My_Django_Stuff/simple_social_clone/simplesocial/templates/base.html,error at line 20
post/_post.html
10 :
11 : <!-- Optional theme -->
12 : <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1irsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
13 :
14 : <!-- Latest compiled and minified JavaScript -->
15 : <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
16 :
17 :
18 : <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
19 :
20 : {# NOTE: To use the static,you m ust put the loadstatic files at the beggining #}
21 : <link rel="stylesheet" href="{% static 'simplesocial/css/master.css' %}">
22 :
23 : </head>
24 : <body>
25 : {# mynav is my own class to setup my css#}
26 : <nav class="navbar mynav" role="navigation" id="navbar">
27 : <div class="container">
28 : <a class="navbar-brand mynav" href="{% url 'home' %}">Star Social</a>
29 : <ul class="nav navbar-nav navbar-right">
30 : {% if user.is_authenticated %}
Traceback (most recent call last):
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/backends/django.py",line 61,in render
return self.template.render(context)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/base.py",line 170,in render
return self._render(context)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/base.py",line 162,in _render
return self.nodelist.render(context)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/base.py",line 938,in render
bit = node.render_annotated(context)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/base.py",line 905,in render_annotated
return self.render(context)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/loader_tags.py",line 150,in render
return compiled_parent._render(context)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/base.py",line 62,in render
result = block.nodelist.render(context)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/base.py",in render_annotated
return self.render(context)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/defaulttags.py",line 312,in render
return nodelist.render(context)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/base.py",line 211,in render
nodelist.append(node.render_annotated(context))
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/base.py",line 180,in render
template = context.template.engine.select_template(template_name)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/engine.py",in select_template
raise TemplateDoesNotExist(','.join(not_found))
The above exception (post/_post.html) was the direct cause of the following exception:
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/core/handlers/exception.py",line 47,in inner
response = get_response(request)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/core/handlers/base.py",line 202,in _get_response
response = response.render()
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/response.py",line 105,in render
self.content = self.rendered_content
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/response.py",line 83,in rendered_content
return template.render(context,self._request)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/backends/django.py",line 63,in render
reraise(exc,self.backend)
File "/Users/Homepage/opt/anaconda3/lib/python3.8/site-packages/django/template/backends/django.py",in reraise
raise new from exc
Exception Type: TemplateDoesNotExist at /groups/posts/in/first-post/
Exception Value: post/_post.html
解决方法
在我的group_detail.html中,我说的是:
{group.posts.all%中的帖子的%} {%包括“ posts / _post.html”%}
当它应该是“ posts / _post.html”时,我有“ post / _post.html”