状況は単純です: 特定のオブジェクト (モデル ブロック) を次のようなテンプレートで表示したい:{% block_by_name editorial as b %} {{ b.title }}
または、できれば次のようなフィルターを使用します{{ block.title|get_by_name:editorial }}
。
simple_tag で成功しました。
ID によるアイテムの取得は正常に機能します。
# in templatetags
@register.simple_tag
def block_by_id(id=1):
b = Block.objects.get(id=id)
return b
# in html template it get block with id 3 and shows it OK
{% block_by_id 3 as b %} {{ b.title }}
ただし、以下のように名前やタグでブロックを取得したい場合は、
名前によるアイテムの取得に失敗する
#
@register.simple_tag
def block_by_name(n="default_name"):
b = Block.objects.get(name=n)
return b
# in html template it fails to get block with name "editorial"
{% block_by_name editorial as b %} {{ b.title }}
Django は、Block matching query does not exist
変数が空の文字列であると想定しているため、変数n
を渡しましたが、「編集」というエラーが表示されます。
トレースバック:
b = Block.objects.get(name=n)
...
▼ Local vars
Variable Value
n
''
なぜこれが起こるのか分かりません。変数が消えないようにするにはどうすればよいですか?