我在应用程序的urls.py
中定义了一个网址
urlpatterns = [
url(r'^group/create', create_group, name='create_group'),
url(r'^account/create', create_account, name='create_account'),
]
context contains
{'buttons': {'create_account': {'btn_text': 'Create Account',
'secondary': 'Add a new accounting ledger',
'url': 'create_account'}}
我应该如何在模板中使用网址。
{% 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,如何生成url?
答案 0 :(得分:1)
我个人认为不可能。我建议您先在views.py中使用reverse
来解释网址,然后将解释后的结果传递给模板:
from django.core.urlresolvers import reverse
url = reverse('create_account')
# add url to your context
根据django docs,reverse
与您在模板中使用url
模板标记的结果相同。
答案 1 :(得分: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 %}
请注意,字典不是订购的。如果您担心字典中项目的顺序,则使用不同的数据结构,如列表或有序字典。