2015-11-02 2 views
-1

Я работаю над блогом, используя Django 1.7.Django 1.7 | Форма комментария с сообщением в блоге

Я хочу включить форму комментариев в каждое сообщение в блоге, но не знаю, как это сделать.

Вот мой код:

Модели:

class Category(models.Model): 
    name = models.CharField(max_length=128, unique=True) 
    slug = models.SlugField(unique=True) 

    def save(self, *args, **kwargs): 
      self.slug = slugify(self.name) 
      super(Category, self).save(*args, **kwargs) 

    def __unicode__(self): 
      return self.name 

class Post(models.Model): 
    title = models.CharField(max_length=100, unique=True) 
    slug = models.SlugField(max_length=100, unique=True) 
    body = models.TextField() 
    posted = models.DateTimeField(db_index=True, auto_now_add=True) 
    category = models.ForeignKey(Category) 

    def save(self, *args, **kwargs): 
     self.slug = slugify(self.title) 
     super(Post, self).save(*args, **kwargs) 

    def __unicode__(self): 
     return '%s' % self.title 

class Comment (models.Model): 
    comment_body = models.TextField() 
    commented_on = models.DateTimeField(db_index=True,auto_now=True) 
    commenter = models.ForeignKey(User) 
    post = models.ForeignKey(Post) 

    def __unicode__(self): 
     return '%s' % self.comment_body 

class Tag (models.Model): 
    title = models.CharField(max_length=100, unique=True) 
    slug = models.SlugField(max_length=100, unique=True) 
    post = models.ManyToManyField(Post) 

    def save(self, *args, **kwargs): 
     self.slug = slugify(self.title) 
     super(Tag, self).save(*args, **kwargs) 

    def __unicode__(self): 
     return '%s' % self.title 

Просмотров:

def blog_post(request, blog_post_slug): 
    post_detail = Post.objects.get(slug=blog_post_slug) 
    comments = Comment.objects.filter(post=post_detail.id) 
    tags = Tag.objects.filter(post=post_detail.id) 
    context_dict = {'post': post_detail, 'slug': blog_post_slug, 'comments':comments, 'tags':tags} 
    response = render(request,'blog/blog_post.html', context_dict) 
    return response 

Шаблон:

{% extends 'base.html' %} 

{% load staticfiles %} 

{% block title %}{{ post.title }}{% endblock %} 

{% block body_block %} 
<div class="container"> 
    <div class="post-preview"> 
    {% if post %} 
    <div> 
     <h2>{{ post.title }}</h2> 
     <small>{{ post.category }}</small> 
     <p class="post-meta">{{ post.posted }}</p> 
     <p>{{ post.body }}</p> 
<h3>Comments</h3> 
     {% if comments %} 
     {% for comment in comments %} 
     <h5> {{ comment.commenter | capfirst }}</h5> 
      <p> {{ comment.comment_body }}</p> 
      <small>{{ comment.commented_on }}</small> 
     <hr> 
     {% endfor %} 
     {% else %} 
     <small>No comments Yet </small> 
     {% endif %} 

     <h3>Tags</h3> 
     {% if tags %} 
     {% for tag in tags %} 
     <span> <a href="{% url 'blog:tag' tag.slug %}"> {{ tag.title }}</a>,</span> 
     {% endfor %} 
     {% else %} 
     <small>Without Tags! </small> 
     {% endif %} 

    </div> 
    {% else %} 
    <strong>No such post</strong> 
    {% endif %} 
     </div> 
    </div> 
{% endblock %} 

Я использую form.py для создания форм, но неуверенный, что делать в этом сценарий.

Я просто хочу, чтобы зритель мог представить свои комментарии на странице блога.

ответ

1

(Это ответ, вероятно, основаны от учебники Django на djangoproject.com и, возможно, в других местах)

Вы можете просто определить форму для комментирования в form.py, сделать новый экземпляр этого в вашей blog_post() функции , и включают новообразованную форму в context_dict. Затем в шаблоне используйте {{ thenameyougiveyourforminthecontext }}, чтобы включить простую версию формы.

Затем, в методе blog_post() в views.py, обращайтесь с представлением формы. Сайт Django (в частности, этот page) описывает, как обрабатывать представление формы. В обработке формы вы можете создать новый объект Comment со словарными записями в form.cleaned_data (при условии, что вы его проверили с использованием form.is_valid()) и сохраните его.

Это очень краткий обзор того, как это сделать. Пожалуйста, посмотрите на URL, с которым я связан, чтобы действительно понять, как это сделать.

 Смежные вопросы

  • Нет связанных вопросов^_^