django - 如何渲染我在网页中使用的模板?

时间:2011-06-25 17:41:29

标签: python django templates view render

我正在使用django 1.2.4。  我在registration / login.html中有一个登录模板(行动是django.contrib.auth.views.login),我希望将它包含在每个页面上。我在base.html上创建了一个块,就像我为每个模板做的那样。问题是浏览器无法识别此登录块,我认为这是因为我只渲染每个视图的模板,我不会渲染此登录模板。

这是我的文件夹结构:

/templates/
    base.html
    /myapp/
        object_list.html
        ...
    /registration/
        login.html

...这是我的login.html:

{% extends "base.html" %}
{% block mylogin %}
<div class="horizontal">
    {% if form.errors %}
        <p>Your username and password didn't match. Please try again.</p>
    {% endif %}
    <form action="{% url django.contrib.auth.views.login %}" method="post">
        {% csrf_token %}
        <div class="login_box">
            <div class="login_text">{{ form.username.label_tag }}</div><div class="login_input">{{ form.username }}</div>
            <div class="password_text">{{ form.password.label_tag }}</div><div class="password_input">{{ form.password }}</div>
            <input id="button_login" type="submit" value="" />
        </div>
    </form>
</div>
{% endblock %}

...在我的base.html中我有:

<div id="some_div">
    {% block mylogin %} {% endblock %}
</div>

我在base.html中包含了basestyle.css,其他模板也正确地继承了......这似乎是一个阻塞问题......

那么......我怎样才能为每个视图渲染这个模板?

谢谢

2 个答案:

答案 0 :(得分:3)

我认为您正在寻找include标记。这样您就可以在base.html中包含您的登录html代码段:

{% include "/registration/login.html" %}

答案 1 :(得分:0)

我真正需要的是在templatetags / mytags.py中创建一个templatetag,我在其中定义一个名为get_login的函数,如下所示:

@register.inclusion_tag('registration/login.html', takes_context=True)
def get_login(context):
    ...
    return {'formLogin':  mark_safe(AuthenticationForm())}

...并在base.html中:

{% load mytags  %}{% get_login  %}

现在的问题是模板(registration / login.html)无法识别“{{formLogin.username}}”,“{{formLogin.password}}”等等。

我错过了什么?

更新1:

mark_safe返回django.utils.safestring.SafeString的实例,而不是表单。 使用(AuthenticationForm()而不是mark_safe(AuthenticationForm()),它可以工作!