2

このように、変数 (shop.id) を受け取り、ショップがデータベース モデルにあるかどうかに応じて 2 つの文字列のいずれかを返すテンプレート タグを含む Django テンプレートがあります。

{% is_shop_claimed shop.id %}

template タグによって返される可能性のある 2 つの文字列は次のとおりです。

return '<p>Taken</p>'

また

return '<a href="/claim_shop/{{shop.id}}/">Claim shop now</a>'

コードが実行されると、2 番目の文字列が返された場合、次のようにテンプレートに表示されます (ブラウザーでページ ソースを表示します)。

<a href="/claim_shop/{{shop.id}}/">Claim shop now</a>

このようなリンクとしてブラウザに表示されます

今すぐショップを請求

問題は、href の shop.id が Django テンプレート エンジンによって数値に評価されないことです。

たとえば、ショップ 123 の場合、リンクは次のように表示されます。

<a href="/claim_shop/123/">Claim shop now</a>

文字列がエスケープされないように、テンプレートタグまたはテンプレート内の文字列に適用するフィルターについてDjangoドキュメントを確認しましたが、うまくいきません。

私はこれを見てきました、テンプレートで {{shop.id}} を評価する簡単な方法があるはずです。

また、2 つの文字列の代わりに Bool を返すようにテンプレート タグを作成し、テンプレートにプレゼンテーションを残しておきますが、このようにテンプレート タグの周りに if ステートメントを使用します。

{% if is_shop_claimed shop.id %}
    <p>Taken</p>
{% elif not is_shop_claimed shop.id %}
    <a href="/claim_shop/{{shop.id}}/">Claim shop now</a>
{% endif %}

if ステートメント内にテンプレート タグを配置できないため、機能しません。

{{shop.id}} を数値に評価する方法について何か提案はありますか? どんな助けでも大歓迎です。私は Django と Python を学んでおり、この問題に何時間も費やしています。

4

2 に答える 2

3

値が渡されているので、それを代入してください。

return '<a href="/claim_shop/%s/">Claim shop now</a>' % (shop_id,) # or however you refer to it in the code
于 2012-11-29T08:42:55.000 に答える
1

is_claimedショップ モデルにプロパティを追加することをお勧めします。

class Shop(models.model):

    # you fields are here

    @property
    def is_claimed(self):
        # logik for determining if the shop is claimed
        if claimed:
            return True
        else:
            return False

次に、テンプレートで使用できます:

{% if shop.is_claimed %}
    <p>Taken</p>
{% else %}
    <a href="/claim_shop/{{shop.id}}/">Claim shop now</a>
{% endif %}

これを必要に応じて含めることができるスニペットに移動したり、(さらに進んで)包含タグを作成したりすることもできます。

于 2012-11-29T08:51:22.670 に答える