【发布时间】:2021-01-01 15:38:25
【问题描述】:
任何人都可以建议如何查询要在我的 HTML 中显示的帖子的 `total_likes,我试过了,但出现了这个错误:
NameError: Slug is not defined
一位专家建议我使用我不熟悉的通用类视图,有没有其他方法可以查询正确的帖子并定义 slug?不确定为什么它不适用于主页提要视图,但它确实适用于详细博客视图。其实怎么回事。我不能在主页视图中包含 slug 参数,因为 url 不包含 .真的没有别的办法了吗?
views.py
def home_feed_view(request, slug=None):
context = {}
blog_posts = sorted(BlogPost.objects.all(), key= attrgetter('date_updated'), reverse = True)
if slug:
blog_post = get_object_or_404(BlogPost, slug=slug)
context['blog_post'] = blog_post
total_likes = blog_post.total_likes()
context['total_likes'] = total_likes
liked = False
if blog_post.likes.filter(id=request.user.id).exists():
liked = True
context['blog_posts'] = blog_posts
return render(request, "HomeFeed/snippets/home.html", context)
def LikeView(request, slug):
context = {}
post = get_object_or_404(BlogPost, slug=slug)
liked = False
if post.likes.filter(id=request.user.id).exists():
post.likes.remove(request.user)
liked = False
else:
post.likes.add(request.user)
liked = True
return redirect('HomeFeed:detail', slug=slug)
.html
{% for post in blog_posts %}
<td class="table-primary">
<form action="{% url 'HomeFeed:like_post' post.slug %}" method="POST">{% csrf_token %}
{% if liked %}
<button type="submit" name="mysubmitbuttonname" value="{{post.slug}}" class='btn btn-primary btn-sm'>Unlike</button>
{% else %}
<button type="submit" name="mysubmitbuttonname" value="{{post.slug}}" class='btn btn-primary btn-sm'>Like</button>
{% endif %}
{{ total_likes }} Like{{ total_likes|pluralize }}
</form>
</td>
{% endfor %}
models.py
class BlogPost(models.Model):
likes = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='blog_posts', blank=True)
slug = models.SlugField(blank=True, unique=True)
def total_likes(self):
return self.likes.count()
urls.py
from django.urls import path
from HomeFeed.views import(
home_feed_view,
LikeView,
)
urlpatterns = [
path('', home_feed_view , name= "main"),
path('<slug>/like/', LikeView, name='like_post'),
]
追溯
Traceback (most recent call last):
File "lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/HomeFeed/views.py", line 81, in home_feed_view
blog_post = get_object_or_404(BlogPost, slug=slug)
NameError: name 'slug' is not defined
【问题讨论】:
-
分享完整回溯。
-
@WillemVanOnsem 共享 :)
-
@WillemVanOnsem 实际上我尝试使用
blog_post = get_object_or_404(BlogPost, slug=request.POST.get('blog_post_slug'))而不是blog_post = get_object_or_404(BlogPost, slug=slug)但后来我无法查询博客文章,并收到 404 错误。我也知道如何使用通用类视图..知道如何正确查询 slug 吗? -
你的
home_feed_view没有slug参数,因此它不能使用它... -
@WillemVanOnsem 是的,我之前设法弄清楚了,如果我不使用通用 django 类视图,我是否无法查询。因为我没有学到很多关于通用 django 类视图的知识