一种将内容呈现到基本模板的方法

时间:2015-01-15 14:05:28

标签: python django django-templates

我有一个基本模板,其中包含页眉,页脚和块"内容"然后我在不同的CBV中覆盖。

用户空间很少" div在标题内,我希望在用户登录时保留用户的信息,如果他是来宾则保留登录表单。

现在想到的唯一方法是创建一个django应用程序并将其用作标记。但我认为有一个更好的解决方案。因为据我所知,标签可以在将来放慢django项目的速度。

另外我想也许我想从渲染子模板的视图中操纵这个div。例如,我在页面上计算并显示一些值,但我也想在"用户空间"中显示它。 div也是如此。我认为这可以通过将数据推送到用户的会话然后在渲染"用户空间"来自其他代码的div

1 个答案:

答案 0 :(得分:3)

假设django.contrib.auth.user中有INSTALLED_APPS,您可以使用user.is_authenticated()访问用户的登录状态:

{% if user.is_authenticated %}
    <div>Welcome back, {{ user.username }} | <a href='/logout/'>Logout</a></div>
{% else %}
    <div>
    <form action='/login/' method='POST'>
    {{ csrf_token }}
    {{ login_form }}
    <input type='submit'>
    </form>
    </div>
{% endif %}

修改

回应你的评论:

  

假设客户端执行POST请求,我们通过该请求计算一些数字 - 总价格。我需要在那个div中显示它。

As documented

定义您的观点:

from django.shortcuts import render
from .forms import MyForm

def simple_view(request):
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = MyForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            result = form.cleaned_data['some_input'] * 50
            return render(request, 'my_template.html', {'result': result})

    # if a GET (or any other method) we'll create a blank form
    else:
        form = MyForm()

    return render(request, 'my_other_template.html', {'form': form})

在模板中显示result

<!-- my_template.html -->
<div>{{ result }}</div>

也许你需要对你的问题更具体,这是我认为你正在寻找的。您应该将您描述的逻辑放入视图中,而不是模板。