Django: Какой замечательный плагин для поддержки изображений в админке? - PullRequest
4 голосов
/ 08 февраля 2010

У меня есть модель ввода статей, и у меня есть поле для выдержки и описания. Если пользователь хочет опубликовать изображение, у меня есть отдельное ImageField со стандартным файловым браузером по умолчанию.

Я пытался использовать django-filebrowser, но мне не нравится тот факт, что для этого требуется django-grappelli, и при этом я не обязательно нуждаюсь в утилите флэш-загрузки - кто-нибудь может порекомендовать инструмент, с помощью которого я могу управлять загрузкой изображений и в основном заменить просмотр файла, предоставляемый django браузером выбора изображений?

В будущем я бы, вероятно, захотел, чтобы оно обрабатывало изменение размера изображения и указывало размеры изображения по умолчанию для определенных типов статей.

Редактировать: Я сейчас пытаюсь adminfiles , но у меня возникают проблемы при его установке. Я взял его и добавил к своему пути в 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 )

Вот моя модель Entry:

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 к этому предварительному просмотру. Я постараюсь добавить его в свой шаблон, который также публикует статью.

Ответы [ 2 ]

9 голосов
/ 08 февраля 2010

Попробуйте 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 и вообще не используя фильтр), но я думаю, что этот пост уже слишком длинный;)

1 голос
/ 09 марта 2011

Grappelli не является обязательным требованием для использования django-filebrowser. Я использую эту реализацию почти во всех моих проектах: https://github.com/wardi/django-filebrowser-no-grappelli

Удачного кодирования!

...