django - 如何渲染我在网页中随处使用的模板?
Posted
技术标签:
【中文标题】django - 如何渲染我在网页中随处使用的模板?【英文标题】:django - How can I render a template I use everywhere in my webpage? 【发布时间】:2011-09-22 16:42:21 【问题描述】:我正在使用 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 并且其他模板也正确继承...这似乎是一个块问题...
那么.. 我怎样才能为每个视图渲染这个模板?
谢谢
【问题讨论】:
【参考方案1】:我认为您正在寻找include 标签。这样你就可以在你的 base.html 中包含你的登录 html sn-p :
% include "/registration/login.html" %
【讨论】:
谢谢!!它可以在没有第一个'/'的情况下工作:% include "registration/login.html" %【参考方案2】:我真正需要的是在 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()) 就可以了!
【讨论】:
以上是关于django - 如何渲染我在网页中随处使用的模板?的主要内容,如果未能解决你的问题,请参考以下文章