1

私はDjangoを初めて使用し、自分のWebサイト用のブログアプリを作成しようとしています。ブログ投稿を保存するために作成したモデルがあります。このモデルには、投稿本文のテキストフィールドが含まれ、TinyMCE(Grappelli経由)を使用して作成およびHTMLに変換されます。この投稿本文にカスタムテンプレートタグを埋め込み、データベースにテンプレートタグとして保存し、サイトで要求されたときにHTMLとしてレンダリングしたいと思います。これまでのところ、タグを適切にレンダリングすることができません。Djangoに投稿内のテンプレートタグを正しく解釈してレンダリングさせるにはどうすればよいですか?カスタムタグは、テンプレートに直接ロードして実装すると正常に機能します。問題が発生するのは、この間接的なロードだけです。ここでこのスニペットを試しましたが(編集:機能します。間違って実行しました!)、正しく機能しませんでした。

これが私の見解です:

from django.shortcuts import render_to_response
from myproject.apps.blog.models import Post

def blog_detail_view(request, year, month, day, slug):
    selected_post = Post.objects.get(status=1, pub_date__year = year, pub_date__month = time.strptime(month, "%b")[1], pub_date__day = day, slug = slug)
    return render_to_response('blog/detail.html', locals())

そして私のテンプレートの関連部分:

...
{% load my_custom_tag %}

<div class="entry">
    {{ selected_post.body|safe }}
</div>
...

保存されたテキストの例を次に示しますPost.body

My first paragraph.
{% my_custom_tag var1 var2 %}
My second paragraph.

現在、これは次のようにレンダリングされます:

<p>My first paragraph.</p>
<p>{% my_custom_tag var1 var2 %}</p>
<p>My second paragraph.</p>

私がこのようなものが欲しいとき:

<p>My first paragraph.</p>
<p><a href="var1"><img src="var2"></a></p>
<p>My second paragraph.</p>
4

2 に答える 2

3

ここでrender_as_template見つかったタグは機能することがわかりました。私はそれを誤解しました。初心者の間違い。スニペットのドキュメントで指定されていないものが2つあり、自分で取得できませんでした。

したがって、次のrender_as_templateようにタグをテンプレートに配置します。

{% load render_as_template %}
{% render_as_template myobject.attribute %}

したがって、内部の任意のテンプレートタグmyobject.attributeをレンダリングできます。ここで私は問題にぶつかりました:

最初に、私は自分の投稿本文をrender_as_templateasselected_post.body|truncatewords_html:"100"|safeまたはasに渡していましselected_post.body|safeた。テンプレートタグは属性のフィルターを処理できず、オブジェクトの名前の一部としてそれらを解釈しているようです。このオブジェクトは存在しないため、何もレンダリングされません。テンプレートに必要なものは次のとおりです。

{% autoescape off %}
{% filter truncatewords_html:"100" %}
{% render_as_template selected_post.body %}
{% endfilter %}
{% endautoescape %}

次に、私の投稿の内容が次の場合:

My first paragraph.
{% my_custom_tag var1 var2 %}
My second paragraph.

次に、my_custom_tag解釈されるために、私は自分の投稿に追加する必要があります:

{% load my_custom_tag %}

今では完璧に動作します!

于 2013-01-17T14:59:30.657 に答える
0

Djangoでカスタムタグを作成するには、タグ関数を記述してから登録する必要があります。このテーマに関する公式のDjangoドキュメントへのリンク。

于 2013-01-04T06:24:35.723 に答える