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 - 如何渲染我在网页中随处使用的模板?的主要内容,如果未能解决你的问题,请参考以下文章

如何解析和渲染 json 以在 Django 模板中使用

渲染后如何获取模板(Django)

Django 模板

渲染模板 django cms 插件中的简单循环

使用 jinja2 模板引擎渲染 django 表单

django select_related 在模板渲染中起作用?