2016-03-07 18 views
1

我有urls.py定義的應用程序的URL如何通過URLNAME作爲一個變量URL標籤在Django

urlpatterns = [ 
    url(r'^group/create', create_group, name='create_group'), 
    url(r'^account/create', create_account, name='create_account'), 
] 

上下文包含

{'buttons': {'create_account': {'btn_text': 'Create Account', 
           'secondary': 'Add a new accounting ledger', 
           'url': 'create_account'}} 

我應該如何在模板中使用的URL。

{% for button in buttons %} 
    <li class="collection-item"> 
    <div> 
     {% with btn_url=button.url %} 
      <a class="btn" href="{% url btn_url %}">{{ button.btn_text }}</a> 
     {% endwith %} 
     <span class="black-text">{{ button.secondary }}</span> 
    </div> 
    </li> 
{% endfor %} 

在模板上面的代碼拋出

Reverse for '' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

我應該如何通過URL名稱爲變量到url模板標籤? 或者如果我應該如何在我的視圖本身生成整個網址,該網址應該如何生成?

回答

0

我個人認爲這不可能。我建議你在views.py先解釋URL使用reverse,再通過解釋結果爲模板:

from django.core.urlresolvers import reverse 
url = reverse('create_account') 
# add url to your context 

根據django docs,當你在模板中使用url模板標籤reverse將有相同的結果。

0

在你的情況下,buttons是一本字典,通過{% for button in buttons %}如此循環將只通過該詞典的鑰匙環,即['btn_text',]

您可以通過下面的項或值要循環,而不是:

{% for key, value in buttons.items %} 
<a class="btn" href="{% url value.btn_url %}">{{ value.btn_text }}</a> 
{% endfor %} 

,或者,如果你不需要的鑰匙,就可以通過值環

{% for value in button.values %} 
<a class="btn" href="{% url value.btn_url %}">{{ value.btn_text }}</a> 
{% endfor %} 

注意迪ctionaries沒有命令。如果您擔心字典中的項目順序,請使用不同的數據結構,如列表或有序字典。

+0

謝謝。我沒有試過這個。我建議使用@ reverse。 – eskawl