私はパートエディターでありパートディベロッパーであり、いずれのキャリアでも全く進歩していません。しかし、私は小規模プロジェクトだけを実施しています。私は最近、WagtailとPuputを使ってDjangoのサイト(開発サーバーのみ)に最近追加したブログで、5年後には週あたり2〜50KBの画像をアップロードしたいと思っていますそれは私が何か他のことをすることになるでしょう。膨大な数の読者や膨大なストレージの必要はありません。そういう状況の中で、Puputブログの小さな画面にサイズ変更されていないアップロードされた画像、非応答性のデザインで遭遇した問題を克服するために私が何をしているのかが具体的に分かります。あるいは、私はいくつかのばかげた過ちを犯したのですが、Puput/Wagtailエディタを間違って使用していましたか?python/django/wagtail/puput/hallo/non-responsive_images_under_Bootstrap3.rant
Puputエディタの「本文」テキストボックスをクリックして画像を挿入すると、非常に簡単です。ファイルを参照し、画像に名前を付けて、全幅にするか左右に並べるかを選択するだけです。これを行うと、イメージは以前に確立された "media"フォルダにアップロードされ、データベースは単に "media"フォルダ内のイメージの場所を含むように更新されます。テキスト本文の<img>
タグには、データベースエントリへのリンクであるID属性が与えられます。
2つの問題が起こります。(1)ブラウザーのレスポンシブデザインモードに入ると、画像は小さな画面より大きく応答性がなくなります。実際にイメージがメディアフォルダに保存されていない場合、3つの ---オリジナルは "original_images"というサブディレクトリにあり、 "images"サブディレクトリには2つのイメージがあります。 2つの追加画像は、あなたの全幅の選択、おそらくは画像の縦横比などによっては、元の画像と全く同じピクセルサイズを持たない場合があります。
これはもちろん耐えられないあなたは私が間違いを犯したかも知れません。そうでなければ、これを過ぎるために私がやったことがここにあります。そしてまた、私の質問は、これが実際にうまくいくのか、それとも良いアイデアがあるのでしょうか。私はthis postをgithubに見つけました。特に、insert_editor_js
とwagtail_hooks.py
フックに関するjerelのコメントが見つかりました。これは、標準的なhalloのrichtextの制限を克服し、HTMLを表示し、入力できる第2のエディタウィンドウを開くことができます。
しかし、Wagtailには、特定のHTMLタグで特定の属性のみを使用できるようにするこのクラスがあります。だから、Wagtailの人々はまた、それを変更するためのフックを持っています、それはhereと説明されています。
from wagtail.wagtailcore import hooks
from wagtail.wagtailcore.whitelist import attribute_rule, check_url, allow_without_attributes
from django.utils.html import format_html
# This one is from the esteemable jerel.
@hooks.register('insert_editor_js')
def enable_source():
return format_html(
"""
<script>
registerHalloPlugin('hallohtml');
</script>
"""
)
# This is modified from the Wagtail docs example.
@hooks.register('construct_whitelister_element_rules')
def whitelister_element_rules():
return {
'blockquote': allow_without_attributes,
'a': attribute_rule({'href': check_url, 'target': True}),
'img': attribute_rule({'src': True, 'width': True, 'height': True, 'alt': True, 'style': True}),
'p': attribute_rule({'style': True, 'class': True}),
}
私が述べるように、特に、デフォルトで私は'src': check_url
の代わりに'src': True
を入れているimg
タグ、のためのノート(check_url
は、データURIを拒否し関数である。ここではwagtail_hooks.py
ファイルの私のバージョンです以下)。私にとって重要なその他の変更点は、a
タグには'target': True
、さらには'style': True
の追加が含まれています。
Puputは、「モバイルファースト」のBootstrap3をネイティブに使用しています。 PuputのBootstap3を使って画像に反応を持たせるには、前にやったことをimg
タグで行い、属性をwidth="100%"
に設定するか、style="width:100%;"
で設定する必要がありました。プラグインのhallohtml
へ)。
ここに問題があります:PuputまたはWagtailがimg
タグに与える余分な属性を削除した場合のみ動作することがわかりました(そうしないと変更が削除されます)。img
タグは、Puputのエディタからまっすぐに見えるものです:<img data-embedtype="image" data-id="9" data-format="fullwidth" data-alt="junk" class="richtext-image full-width" src="/home/mike/myproject/public_html/djangoprojectdir/public/media/images/imagename.width-800.png" alt="junk" height="1115" width="596">
。だから、
私は離れてheight
を投げると、私もdata-format
を削除しない限り動作しません100%
にwidth
を変更した場合など、私はそれのすべてを行う場合、私は応答デザイン... しかしを持って、データベースがノーでありますより長い関わり。代わりに、画像ファイルを手動でimg
タグにリンクしただけです。
レスポンシブなデザインの動作を実現する私のソリューションは、ページとイメージファイルの間のデータベースリンケージを無効にします。私は、私がアップロードしたすべてのメディアの3つのイメージがメディアフォルダに存在しているという馬鹿げた存在を逃すことはないと言わざるを得ない。そして、私は、何年もの間、データベースだけでなく、多くのイメージのフォルダにも関わらず、失敗することなく保護しバックアップすることをあまり好きではありません。
私が試したもうひとつのこと---うまくいくようです--- Base64でのデータURIの使用です。これは約hereです。私は多くの高密度画像を使用しないので、実行可能なようです。 hallohtml
エディタを使って、画像のBase64エンコーディングを切り取り、img
タグのsrc
に貼り付けました。それはまったく扱いにくいものではありません。
もう一度、このようなことをする必要がありますか(私が妥当なものを提案していますか)...または、どうやって暗闇の中で画像をアップロードするか、プップとワグテールレスポンシブなデザイン(私はすべての指示に従いました。
は、「私はこのような何かを持っているか」 - あなたはそう直感画像処理へのセキレイの独自のアプローチに同意しない場合は、そうすれば、あなたが望むことをするために、フレームワークを断片的にハックする必要があります。おそらく、より集中的な質問(「なぜWagtail do Thing X」または「行動Yを無効にするか」)は、より建設的なアプローチを提案するのに役立つでしょうか? – gasman
私はここでテキストの壁を読んでいませんが、質問のタイトルは実際の質問には関係していないことを示唆しています...あなたはそれを編集して、あなたは修正しようとしていますか? – Sayse
私は通常のWagtail画像挿入方法を、反応的に設計されたページを作り、Puputの一部であるBootstrapの約束を果たすようにしています。私は十分に分かりました---私の経験では、小さな画面に行くときに画像が適切に縮小されません(あなたが 'width =" 100% "'を設定するためにフック機構を使用しない限り)。もしあなたが好きなのであれば、なぜ、Wagtailは「Wagtail独自の画像処理方法を使用すると応答性の高いデザインページを生成しないのですか?」という質問が残っています。 ? " –