【问题标题】:A way to render content to a base template一种将内容呈现到基本模板的方法
【发布时间】:2015-01-15 14:05:27
【问题描述】:

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

在我想保留用户信息以防他登录的标题中几乎没有“用户空间”div,如果他是客人,我想保留登录表单。

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

我还想,也许我想从呈现子模板的视图中操纵这个div。例如,我计算并在页面上显示一些值,但我也想在“用户空间”div 中显示它。我认为这可以通过将数据推送到用户会话然后在从另一个代码呈现“用户空间”div 时使用它来实现。

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    假设您的INSTALLED_APPS 中有django.contrib.auth.user,您可以使用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>
    

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

    【讨论】:

    • 当然,这假设您在设置中启用了django.contrib.auth.context_processors.auth 作为模板上下文处理器。
    • 如果我想在这里添加一些我在问题中提到的自定义数据怎么办?这个问题实际上并不是关于特定的用户登录示例,而是更多关于一般图片的问题。如何自行实现 auth.user 应用程序的功能。它使用包含标签?
    • @Glueon 你的用户模型是什么样的,你想要包括什么?如果您看过一个示例并且想知道它是如何工作的,为什么不看看它的源代码呢?
    • @Two-Bit Alchemist 我想了解如何更改基本模板中的上下文数据。假设客户端执行了一个 POST 请求,我们通过该请求计算一些数字 - 总价。我需要在div 中显示它。
    • 我不知道这是什么意思:“现在想到的唯一方法是创建一个 django 应用程序并将其用作标签。但我认为有更好的解决方案。因为到目前为止据我所知,标签将来会减慢 django 项目的速度。”
    猜你喜欢
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2010-11-19
    • 1970-01-01
    • 2015-10-15
    相关资源
    最近更新 更多