【问题标题】:Django templates - can you pass arguments to template tags *args style?Django 模板 - 你可以将参数传递给模板标签 *args 样式吗?
【发布时间】:2015-05-16 04:39:15
【问题描述】:

我正在尝试在我的模板中实现一些面包屑。

我有些视图 url 采用一个参数,而另一些则采用两个。

url(r'^firstpage/(?P<arg_one>(option1|option2))/(?P<unique_identidfier>[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890\-_]+)/', views.MyView.as_view(), name="two_arg_view"),

url(r'^secondpage/(?P<unique_identidfier>[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890\-_]+)/', views.MySecondView.as_view(), name="one_arg_view),

我想通过 get_context_data 传入一个面包屑数组,然后在模板中循环它们:

<div class="breadcrumbs">
        {%for crumb in breadcrumbs %}
            <a href="{% url crumb.url arg1 optional_arg2 %}" >{{ crumb.text }}</a>&nbsp;>&nbsp;    
        {% endfor %}
        {{ current_page }}
</div>

有没有办法可以将可选数量的参数传递给 url 模板标签?

就像用 *args 调用某些东西时一样?

我想做的(但不起作用)是:

 <a href="{% url crumb.url *crumb.args %}" >{{ crumb.text }}</a>&nbsp;>&nbsp;    

【问题讨论】:

  • 您应该在视图中执行此操作,然后将 args 作为上下文变量传递给您的模板。到那时,您绝对可以遍历它们。
  • 我应该在视图中做什么?生成网址文本?如果我沿着这条路线走,感觉就像我最终会将显示逻辑放在视图中。

标签: django templates django-templates


【解决方案1】:

inclusion tag 很可能会满足您的需求。

包含标签可以接受当前模板上下文,您可以从那里检索您的视图值,而不必手动传递它们。通过包含包含 div、锚标签等的模板,您可以保持模板简单:

{% tag_url %}

而不必重复一堆条件语句和循环。

我不建议在视图中执行这种逻辑,因为它不是封装或可重用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2021-06-05
    • 2011-08-18
    • 2019-02-15
    • 2017-03-02
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多