我正在使用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,其他模板也正确地继承了......这似乎是一个阻塞问题......
那么......我怎样才能为每个视图渲染这个模板?
谢谢
答案 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()),它可以工作!