4

記事のエントリ モデルがあり、抜粋と説明のフィールドがあります。ユーザーが画像を投稿したい場合は、デフォルトの標準ファイル ブラウザーを持つ個別の 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 )

これが私のエントリーモデルです:

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 テンプレート タグを使用したスケーリングを含みます)。

このアプリは、他のタイプのファイルの挿入を簡単にサポートできます。特定のファイル タイプのテンプレートを作成して、Web サイトでの表示方法を示すだけです。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 に答える