4

我有一个文章条目模型,我有一个摘录和描述字段。如果用户想要发布图像,那么我有一个单独的 ImageField,它具有默认的标准文件浏览器。

我尝试过使用django-filebrowser,但我不喜欢它需要django-grappelli也不一定想要 Flash 上传实用程序的事实 - 任何人都可以推荐一个我可以管理图像上传的工具,并且基本上用图像选择替换 django 提供的文件浏览浏览器?

将来我可能希望它处理图像大小调整并为某些文章类型指定默认图像大小。

编辑:我现在正在尝试管理文件,但我在安装它时遇到了问题。我抓住它并将其添加到我的 python 路径中,将其添加到 INSTALLED_APPS,为其创建数据库,上传图像。我按照说明修改我的模型以指定adminfiles_fields和注册,但它不适用于我的管理员,这是我admin.py的文章:

from django.contrib import admin
from django import forms
from articles.models import Category, Entry
from tinymce.widgets import TinyMCE
from adminfiles.admin import FilePickerAdmin

class EntryForm( forms.ModelForm ):

    class Media:
    js = ['/media/tinymce/tiny_mce.js', '/media/tinymce/load.js']#, '/media/admin/filebrowser/js/TinyMCEAdmin.js']

    class Meta:
        model = Entry

class CategoryAdmin(admin.ModelAdmin):
    prepopulated_fields = { 'slug': ['title'] }


class EntryAdmin( FilePickerAdmin ):
    adminfiles_fields = ('excerpt',)
    prepopulated_fields = { 'slug': ['title'] }
    form = EntryForm

admin.site.register( Category, CategoryAdmin )
admin.site.register( Entry, EntryAdmin )

这是我的入口模型:

class Entry( models.Model ):
    LIVE_STATUS = 1
    DRAFT_STATUS = 2
    HIDDEN_STATUS = 3
    STATUS_CHOICES = (
    ( LIVE_STATUS, 'Live' ),
    ( DRAFT_STATUS, 'Draft' ),
    ( HIDDEN_STATUS, 'Hidden' ),
    )
    status = models.IntegerField( choices=STATUS_CHOICES, default=LIVE_STATUS )
    tags = TagField()
    categories = models.ManyToManyField( Category )
    title = models.CharField( max_length=250 )
    excerpt = models.TextField( blank=True )
    excerpt_html = models.TextField(editable=False, blank=True)
    body_html = models.TextField( editable=False, blank=True )
    article_image = models.ImageField(blank=True, upload_to='upload')
    body = models.TextField()
    enable_comments = models.BooleanField(default=True)
    pub_date = models.DateTimeField(default=datetime.datetime.now)
    slug = models.SlugField(unique_for_date='pub_date')
    author = models.ForeignKey(User)
    featured = models.BooleanField(default=False)

    def save( self, force_insert=False, force_update= False):
    self.body_html = markdown(self.body)
    if self.excerpt:
        self.excerpt_html = markdown( self.excerpt )
    super( Entry, self ).save( force_insert, force_update )

    class Meta:
    ordering = ['-pub_date']
    verbose_name_plural = "Entries"

    def __unicode__(self):
    return self.title

编辑#2:为了澄清我确实将媒体文件移动到我的媒体路径并且它们确实在渲染图像区域,我可以很好地上传,<<<image>>>标签被插入到我的可编辑 MarkItUp w/ Markdown 区域,但它没有在MarkItUp 预览 - 也许我只需要将 应用|upload_tags到该预览中。我会尝试将它添加到我的模板中,该模板也发布了这篇文章。

4

2 回答 2

9

试试django-adminfiles - 太棒了。您可以上传图像或选择现有图像,并将它们插入文本中的任何位置,它们将显示为<<<placeholders>>>. 您可以使用特殊模板完全控制如何在实际站点上解析占位符 - 允许您控制图像在站点上的显示方式(包括缩放,例如使用 sorl.thumbnail 模板标签)。

该应用程序可以轻松支持插入其他类型的文件 - 您只需为给定的文件类型创建一个模板,显示它应该如何在您的网站上呈现。它甚至支持从 Flicker 和 YouTube 插入。

正如你所看到的,我仍然很想找到它:)

它在您的管理面板中看起来像这样(尽管屏幕截图来自一个非常旧的版本):

django-adminfiles http://lincolnloop.com/legacy/media/img/django-admin-uploads.png

更新:您可以完全控制图像的显示时间和方式。一些例子:

  1. 对于主要文章页面,我想要默认的图像显示样式,这就是我在模板中编写的内容(这将根据我在默认 adminfiles/render/image/default.html 模板中定义的规则呈现图像):

    {{ article.content|render_uploads }}

  2. 但假设在我的电子邮件通讯中我不想嵌入图像 - 我只想链接到它。我将在模板中写下这个(这将根据我在 adminfiles/render_as_link/default.html 模板中定义的规则呈现图像):

    {{ post.content|render_uploads:"adminfiles/render_as_link" }}

  3. 我不想在我的搜索索引中包含图像嵌入代码(或任何其他 HTML),所以在我的 django-haystack 模板中,我只是这样做以删除所有 HTML:

    {{ article.content|render_uploads|striptags }}

  4. 或者我可以这样做来索引图像的标题(但不是图像本身;再次,这假设你有 adminfiles/only_caption/default.html 模板和正确的代码):

    {{ article.content|render_uploads:"adminfiles/only_caption" }}

  5. 好的,但是如果我想保留所有其他 HTML 格式,但不想显示图像怎么办?我将创建一个空adminfiles/blank/default.html文件并为此:

    {{ article.content|render_uploads:"adminfiles/blank" }}

还有其他一些方法可以达到相同的效果(例如通过选择正确ADMINFILES_REF_START而不ADMINFILES_REF_END使用过滤器),但我认为这篇文章已经太长了;)

于 2010-02-07T23:20:48.167 回答
1

Grappelli 不是使用 django-filebrowser 的要求。我几乎在所有项目中都使用了这个实现:https ://github.com/wardi/django-filebrowser-no-grappelli

快乐编码!

于 2011-03-09T16:14:20.407 回答