2013-05-05 93 views
2

我正在使用django开发博客,我试图弄清楚的最后一件事是如何在博客上发布图像。我已经可以通过我的管理面板很好地发布一些文本,而现在我想要的是能够向帖子添加图像。我是一个完全新手,所以基本的错误都是原谅。如何在django博客文章中添加图像

我觉得像这样的模式:

class Post(models.Model): 
    title = models.CharField(max_length=255) 
    slug = models.SlugField(unique=True, max_length=255) 
    description = models.CharField(max_length=255) 
    content = models.TextField() 
    published = models.BooleanField(default=True) 
    created = models.DateTimeField(auto_now_add=True) 
    image = models.ImageField(upload_to='media') 

    class Meta: 
     ordering = ['-created'] 

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

    def get_absolute_url(self): 
     return reverse('blog.views.post', args=[self.slug]) 

虽然当我尝试这个,我得到一个错误“没有这样的列blog_post.image”,甚至做manage.py sqlflush并重新同步我的数据库后。

,我有这样的观点:

def index(request): 
    posts = Post.objects.filter(published=True) 
    return render(request, 'blog/index.html', {'posts': posts}) 

基本上我想添加图像到后和将其显示在模板的选项。

我已经试过管理文件和各种其他应用程序,并试图从其他人的网站的代码片段,但没有什么作品,所以它不是缺乏尝试。最接近我想要的是在这里找到:http://drumcoder.co.uk/blog/2010/may/12/django-blog-images/(这也不适合我),只是我希望它成为我的Post模型的一部分。

有没有简单的方法来做到这一点?模型和模板将如何看起来像?任何帮助将不胜感激,谢谢。

回答

3

假设您在完成./manage.py syncdb后添加了image。然后再次删除数据库和syncdb(不是首选)。或者添加Django South进行数据迁移(首选)。

如何与南方合作?当你在项目中加入南方时。首先删除image字段,以使您的模型看起来与之前完全相同。然后执行以下步骤:

  • 蟒蛇manage.py convert_to_south myapp.blog
  • 蟒蛇manage.py迁移myapp.blog 0001 --fake

现在添加image现场发回的Post模型和执行以下步骤:

  • 蟒manage.py schemamigration myapp.blog --auto
  • 蟒蛇manage.py迁移myapp.blog
+0

在另一个实例中,是否有方法检查图像是否已经上传到ImageField中,作为模板标签?像{%if ImageField | True%}或其他东西? – 2013-05-07 20:33:11

+0

“另一个实例”是什么意思?你可以使用if来检查'obj'是否有与之相关的图像,例如'如果obj.image:#做某事' – 2013-05-07 20:40:34

1

的依据是ImageField instance default to varchar(100) columns,您可以用简单的增加一个varchar脱身(100),列名为image您APPNAME_post表。

这可以利用适当的GUI来完成(例如:pgAdmin的III PostgreSQL的)或通过命令行接口(例如:psql的)的命令类似于以下:

ALTER TABLE APPNAME_post ADD COLUMN image varchar(100); 

个人而言,我阿米尔提出的使用南方的建议。设置它可能会有更多的工作,但对于未来的架构更改将是非常宝贵的。

相关问题