簡體   English   中英

Django - 為不同的頁面創建一個評論系統,使用一個評論 model

[英]Django - Creating a comment system for different pages, using one Comment model

我正在嘗試創建一個網站,其中包含有關不同城市的信息的頁面。 在每一頁的底部,我希望有一個評論部分。 我的想法是有一個評論 model,它將所有評論存儲在一個地方,每個評論 object 都有一個名為“頁面”的字段,它告訴我它們應該顯示在哪個頁面上。 然后我可以過濾評論,以便只顯示正確頁面的評論。

到目前為止,我已經創建了一個 City model,詳細視圖 CityDetailView 使用它來為每個城市創建一個頁面。 這很好用,並為 URL 使用 slug。 我發表了評論 model 接受:“內容”(描述城市)、“發布日期”、“作者”和“頁面”,我已通過外鍵連接到城市 model。 我認為這個“頁面”字段可用於存儲評論寫在哪個頁面上,以便我可以使用{{ if comments.page == cites.name}}或我的 city.html 模板中的內容來顯示僅對正確頁面的評論。

帶着這種想法,我猜我需要在 CityDetailView 中創建一個 ListView 來列出評論。 這是正確的嗎? 我覺得有更好的方法可以做到這一點,所以任何幫助都將不勝感激。

這是相關代碼,目前,城市頁面沒有評論。 我已經通過 shell 手動添加了這些,兩個測試頁各一個。

視圖.py

from django.shortcuts import render
from django.views.generic import DetailView, ListView
from .models import Post, Comment, City, County


def home(request):
    return render(request, 'blog/home.html', {'title':'TIP Home'})   


class CityDetailView(DetailView):
    model = City
    template_name = 'blog/city.html'
    context_object_name = 'cities'

    class CommentsView(ListView):
        model = Comment
        context_object_name = 'comments'

網址.py

from django.urls import path
from . import views 
from .views import CityDetailView, CountyDetailView

urlpatterns = [
    path('', views.home, name='blog-home'),
    path('<slug>/', CityDetailView.as_view(), name='city-detail'),
]

模型.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.db.models.signals import pre_save
from django.utils.text import slugify

class City(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=250, null=True, blank=True)
    about = models.TextField()

    def __str__(self):
        return self.title

class Comment(models.Model):
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    page = models.ForeignKey(City, on_delete=models.CASCADE)

    def __str__(self):
        return str(self.author)+'-'+str(self.page)+'-'+str(self.pk)        


def slug_generator(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = slugify(instance.title)

pre_save.connect(slug_generator, sender=City)

city.html

{% extends "blog/base.html" %}
{% load static %}
{% block content %}
    <div class="page_heading"><h1>{{ cities.title }}</h1></div>
    <p><center>{{ cities.about }}</center></p>


    {% for comment in comments %}

            <article class="media content-section">
              <div class="media-body">
                <div class="article-metadata">
                  <a class="mr-2" href="#">{{ comment.author }}</a>
                  <small class="text-muted">{{ comment.date_posted|date:'Y n d'  }}</small>
                </div>
                <p class="article-content">{{ comment.content }}</p>
              </div>
            </article>

    {% endfor%}


{% endblock content %}

覆蓋 get_context_data 並通過那里訪問相應頁面 slug 的所有評論。

class CityDetailView(DetailView):
    model = City
    template_name = 'blog/city.html'
    context_object_name = 'cities'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['comments'] = Comment.objects.get(page_slug=self.kwargs['slug'])

        return context

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM