Python Django:模板中的变量是个好主意吗?

Python Django:模板中的变量是个好主意吗?,python,html,django,django-templates,Python,Html,Django,Django Templates,我对Django和HTML很陌生。我的模板中包含以下内容: {% if user.is_authenticated %} <a href='{% url 'vote' %}' id='story-vote-{{ story.id }}' class='vote'><img src='{{ STATIC_URL }}images/arrow.gif'></a> {% else %} <a href='{% url 'login' %}'

我对Django和HTML很陌生。我的模板中包含以下内容:

{% if user.is_authenticated  %}
    <a href='{% url 'vote' %}' id='story-vote-{{ story.id }}' class='vote'><img src='{{ STATIC_URL }}images/arrow.gif'></a>
{% else %}
    <a href='{% url 'login' %}' id='story-vote-{{ story.id }}' class='vote'><img src='{{ STATIC_URL }}images/arrow.gif'></a>
{% endif %}
{%if user.u经过身份验证%}
{%else%}
{%endif%}
因此,只有URL不同,但id和图像是相同的。如何避免这种重复?我会这样做:

{% var link %} {# pseudo-code #}
{% if user.is_authenticated  %}
    link = 'vote'
{% else %}
    link = 'login'
{% endif %}
<a href='{% url link %}' id='story-vote-{{ story.id }}' class='vote'><img src='{{ STATIC_URL }}images/arrow.gif'></a>
{%var link%}{{#伪代码#}
{%if user.u经过身份验证%}
链接=‘投票’
{%else%}
link='login'
{%endif%}
这是个好主意吗?我知道Django不支持局部变量,但是有一些站点包支持这一点。还是在视图中处理逻辑并将
link
作为参数传递给模板更好


那么真正的Django方法是什么呢?

是的,您将
链接作为参数传递给模板。
应用于模板的变量称为上下文


真正的django方法是尽可能地将逻辑与表示分离。这就是模板可以有if和for循环的原因,但肯定应该避免变量。

是的,您可以将
链接作为参数传递给模板。
应用于模板的变量称为上下文


真正的django方法是尽可能地将逻辑与表示分离。这就是为什么模板可以有if和for循环,但肯定应该避免变量。

True-Django是处理视图逻辑或为此创建用户方法的一种方法。 您可以在views.py中

def index(request):
    def can_vote():
        if request.user.is_authenticated:
            return 'vote'
        return 'login'

    user = request.user
    user.vote = can_vote
    ...
然后在模板中,您可以

<a href='{% url user.vote %}' id='story-vote-{{ story.id }}' class='vote'><img src='{{ STATIC_URL }}images/arrow.gif'></a>

True Django处理视图逻辑或为此创建用户方法的方法。 您可以在views.py中

def index(request):
    def can_vote():
        if request.user.is_authenticated:
            return 'vote'
        return 'login'

    user = request.user
    user.vote = can_vote
    ...
然后在模板中,您可以

<a href='{% url user.vote %}' id='story-vote-{{ story.id }}' class='vote'><img src='{{ STATIC_URL }}images/arrow.gif'></a>

如果唯一不同的是链接,您当然可以将其全部放在一行:

<a href='{% if user.is_authenticated  %}{% url 'vote' %}{% else %}{% url 'login' %}{% endif %}' id='story-vote-{{ story.id }}' class='vote'><img src='{{ STATIC_URL }}images/arrow.gif'></a>
在控制器中:

<a href='{{ link }}' id='story-vote-{{ story.id }}' class='vote'><img src='{{ STATIC_URL }}images/arrow.gif'></a>

如果唯一不同的是链接,您当然可以将其全部放在一行:

<a href='{% if user.is_authenticated  %}{% url 'vote' %}{% else %}{% url 'login' %}{% endif %}' id='story-vote-{{ story.id }}' class='vote'><img src='{{ STATIC_URL }}images/arrow.gif'></a>
在控制器中:

<a href='{{ link }}' id='story-vote-{{ story.id }}' class='vote'><img src='{{ STATIC_URL }}images/arrow.gif'></a>