如何将urlname作为变量传递给django中的url标记

时间:2016-03-07 19:22:17

标签: python django

我在应用程序的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?

2 个答案:

答案 0 :(得分:1)

我个人认为不可能。我建议您先在views.py中使用reverse来解释网址,然后将解释后的结果传递给模板:

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

根据django docsreverse与您在模板中使用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 %}

请注意,字典不是订购的。如果您担心字典中项目的顺序,则使用不同的数据结构,如列表或有序字典。