0

状況は単純です: 特定のオブジェクト (モデル ブロック) を次のようなテンプレートで表示したい:{% 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   

''

なぜこれが起こるのか分かりません。変数が消えないようにするにはどうすればよいですか?

4

1 に答える 1