2016-03-07 66 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