2012-11-29 29 views
1

我有Django模板,其中包括一個模板標籤,需要一個變量(shop.id),並取決於店鋪是否在數據庫模型中的兩個字符串的一個返回,這樣評估字符串作爲模板標記 - Django的

{% is_shop_claimed shop.id %} 

由模板標籤返回的兩個可能的字符串是

return '<p>Taken</p>' 

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

當運行該代碼,如果返回的第二串,它出現在模板(觀看在瀏覽器的頁面源)等

<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文檔的過濾器適用於字符串中的模板標籤或模板,以便該字符串沒有逃脫,但沒有運氣。

我已經看過this,但似乎應該有一個簡單的方法使{{shop.id}}在模板中進行評估。

我也取得了模板標籤返回,而不是兩個字符串一個布爾值,使演示模板像我寧願,但如果使用像這樣在一旁

{% 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,並且在這個問題上花了數小時。

回答

2

你傳遞的價值,所以剛剛替補它

return '<a href="/claim_shop/%s/">Claim shop now</a>' % (shop_id,) # or however you refer to it in the code 
+0

感謝@Ingacio這工作,它很容易,我錯過了簡單的解決方案! ;) – paulvs

0

我建議你到你的店鋪模型添加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 %} 

你甚至可以移到這一個片段,您可以包括作爲必要或(更進一步)爲其創建一個inclusion tag

+0

非常感謝這個好主意,我會嘗試一下! – paulvs

+0

我還沒有嘗試過這個解決方案,因爲@ Ignacio的簡單得多,但是再次感謝您的答案,也許這個解決方案對於其他人來說很方便。 – paulvs