如何在DJango

时间:2015-08-22 18:36:47

标签: django

我有一个Django模板,显示使用模板标签生成的链接,我想将其作为上下文变量发送:

views.py:

def my_view(request):
    ...
    link = '''<a href="{% url 'quests:drop' s.id %}">Drop</a>'''

    context = {
        'link': link,
    }
    return render(request, "my_template.html" , context)

我在my_template.html中尝试这个:

{{ link | safe }}

但链接字面上呈现为&#34; {%url&#39;任务:drop&#39; s.id%}&#34;

有没有办法让模板引擎识别并执行上下文变量中发送的模板标签?

编辑:

为什么我要这样做是因为我实际上会向模板发送一个按钮列表,每个按钮都有不同的链接和文本,这些按钮和文本将被循环(在这个例子中,循环遍历各种&#39; s&#39;对象),多个视图将使用模板(每个视图都有自己的按钮集),因此按钮非常特定于上下文。

我的模板正在变成处理所有情况的逻辑意义,并且在上下文中发送按钮似乎会更加干燥并导致更清晰,更易于阅读的模板。

编辑2:

可以解决问题的另一个选择是,如果我可以传递更改的部分:

    link_data = ['quests:drop','Drop']
    context = {
        'link_data': link_data,
    }
    return render(request, "my_template.html" , context)

然后模板会有:

<a href="{% url '{{link_data.0}}' s.id %}">{{link_data.1}}</a>

但是,{{link_data}}没有呈现,我收到错误:

Reverse for '{{ link_data.0 }}' ... not found.

1 个答案:

答案 0 :(得分:1)

参考第二次修改:

模板中的代码应如下所示:

<a href="{% url link_data.0 s.id %}">{{ link_data.1 }}</a>

请注意省略的'{{ }}'标记。