在Django

时间:2018-07-31 07:43:12

标签: python django django-templates django-views

我是Django的新手,并且正在构建一个基本的博客应用程序。 我无法在我的详细信息页面中显示manytomany字段(在标签中)和Foreignkey字段(评论)。

models.py

class BlogContent(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=200)
    content = models.TextField()
    date_published = models.DateField(auto_now=True)
    image = models.ImageField(upload_to='media/')

    def __str__(self):
        return self.title


class TagName(models.Model):
    tag = models.ManyToManyField(BlogContent, null=True)
    name = models.CharField(max_length=100, blank=True, null=True)

    def __str__(self):
        return self.name


class Comment(models.Model):
    comt_text = models.TextField()
    comments = models.ForeignKey(BlogContent, on_delete=models.CASCADE)
    date_published = models.DateField(auto_now=True)
    name = models.CharField(max_length=200, blank=True, null=True)

    def __str__(self):
        return self.name

views.py

def details(request, blogcontent_id):
    data_blog = get_object_or_404(BlogContent, pk=blogcontent_id)
    data_tag = get_object_or_404(TagName, pk=blogcontent_id)
    data_comment = Comment.objects.select_related()

    return render(request, 'details.html',
              {'data_blog': data_blog, 'data_tag':data_tag, 'data_comment':data_comment})

details.html

{% extends 'base.html' %}
{% block body_base %}
 <img class="card-img-top img-responsive" src={{ data_blog.image.url }} alt="Card image cap">
        <h2 class="blog-post-title">{{ data_blog.title }}</h2>
        <p class="blog-post-meta">{{ data_blog.date_published }} {{ data_blog.author }}</p>

        <p>{{ data_blog.content }}</p>
{% endblock %}

在此之后我如何显示外键和通配符?

2 个答案:

答案 0 :(得分:0)

TBH,如果您使用基于类的视图,这会容易得多。

视图将简单地是:

class BlogContentDetail (DetailView):
    model = BlogContent

URL调用为url(r'^blog-detail/(?P<pk>\d+)/$, BlogContentDetail.as_view(), name="blog_detail")

您的html文件应名为blogcontent_detail.html,并保存在模板文件夹的应用子文件夹中

模板将是:

{% extends 'base.html' %}
{% block body_base %}
 <img class="card-img-top img-responsive" src={{ object.image.url }} alt="Card image cap">
        <h2 class="blog-post-title">{{ object.title }}</h2>
        <p class="blog-post-meta">{{ object.date_published }} {{ object.author }}</p>

        <p>{{ object.content }}</p>
       {% for tag in object.tags_set.all %}{{ tag }}{% endfor %}
{% endblock %}

答案 1 :(得分:0)

您可以通过这种方式迭代ManyToMany字段

{% for tags in data_tag.tag.all %} <p > {{tags}} </ p> {% endfor %}

对于外键

{{data_comment.comments}}