如何使用Django在博客中添加多个图像

时间:2019-02-04 13:54:45

标签: python django

我正在使用Django创建我的博客。我想在帖子之间添加图片。为此,我在一个模型中使用5个图像字段。

我尝试在文章的内容中添加<img src=" {{article.img1.url}} "</img>,但在我撰写的文章之间却没有显示图像。

这是我的模板代码,

models.py

class article_by_author(models.Model):
    author_name = models.CharField(max_length=200, default='xxxx')
    article_title = models.CharField(max_length=200, default='')
    article_content = models.TextField(max_length=999999, default='')
    article_date = models.DateTimeField(auto_now_add=True)
    article_category = models.CharField(max_length=200, default='')
    article_priority = models.IntegerField()
    article_category_priority = models.IntegerField()
    article_views = models.IntegerField(default=0)
    author_img = models.ImageField(blank=True, upload_to='images/')
    article_img = models.ImageField(blank=False, upload_to='article_img/')
    img1 = models.ImageField(blank=True, upload_to='article_img/')
    img2 = models.ImageField(blank=True, upload_to='article_img/')
    img3 = models.ImageField(blank=True, upload_to='article_img/')
    img4 = models.ImageField(blank=True, upload_to='article_img/')
    img5 = models.ImageField(blank=True, upload_to='article_img/')

这是我的模板

{% for article in full_article %}
<div id="post-header" class="page-header">
    <div class="background-img" style="background-image: url('{{article.article_img.url }}');"></div>
    <div class="container">
    <div class="row">
        <div class="col-md-10">
            <div class="post-meta">
            <a class="post-category cat-2" href="../../../preview/theme/webmag/category.html">{{article.article_category}}</a>
            <span class="post-date">{{article.article_date|stringformat:".10s"}}</span>
            </div>
            <h1>{{article.article_title}}</h1>
            </div>
        </div>
    </div>
        </div>
<div class="main-post"> 
    {{article.article_content|safe}}
</div>

{% endfor %}

这是我的观点。py

full_article = article_by_author.objects.filter(article_title=article_title)
context = {
    'full_article':full_article,
}

要添加内容,我还有另一个页面,其中添加了所有文章内容。现在我的问题是如何在我写的文章文本之间调用图像(img1,img2,..)。

如果还有其他方法可以这样做,请提出建议。

2 个答案:

答案 0 :(得分:0)

您可以这样做来显示图像

<img src="{{ article.img1.url }}">

尽管您应该拥有比硬编码数量的图像更好的模型,因为如果仅上传1张图像,则img2.url会引发错误。或者,您可以使用if语句检查图像是否存在,然后再显示它

{% if article.img2 %}
   <img src="{{ article.img2.url }}">
{% endif %}

因此,根据您当前的模型结构,这是您最好的选择:

{% if article.img1 %}
   <img src="{{ article.img1.url }}">
{% endif %}
{% if article.img2 %}
   <img src="{{ article.img2.url }}">
{% endif %}
{% if article.img3 %}
   <img src="{{ article.img3.url }}">
{% endif %}
{% if article.img4 %}
   <img src="{{ article.img4.url }}">
{% endif %}
{% if article.img5 %}
   <img src="{{ article.img5.url }}">
{% endif %}

答案 1 :(得分:0)

我建议您更新模型并遵循pep8标准。多对一关系通常是通过为多个对象创建一个单独的模型来处理的,并且在该模型中,使用外键指向“一个”。

class PostPicture(models.Model):
    picture = models.ImageField(related_name='images',upload_to='blog/post_pics', blank=True)
    postid = models.ForeignKey('Post')


class Post(models.Model):
    title = models.CharField(max_length=255)
    content = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    userid = models.ForeignKey(User, related_name='userblogpost')
    PostPicture = None