【问题标题】:Django template rendering: using tags vs using viewsDjango 模板渲染:使用标签与使用视图
【发布时间】:2019-09-26 10:54:24
【问题描述】:

在 Django 中,当在通过请求可用的模板中呈现数据时,我们有 2 个选项:

  1. 获取视图中的数据,通过上下文传递给模板引擎:
def my_view(request):
    username = None
    if request.user.is_authenticated:
        username = request.user.username
        context = {'username': username}
        return render(request=request, template_name='test.html', context=context)

使用具有以下内容的模板:

<p>Hello, {{ username }}<p>
  1. 直接从模板中的请求中获取值:
def my_view(request):
    if request.user.is_authenticated:
        return render(request=request, template_name='test.html', context={})

使用具有以下内容的模板:

<p>hello, {{ request.user.username }}</p>

两者在“正确性”方面有区别吗?

第二个模板中的request 只是被视为请求对象的上下文还是有其他含义?

【问题讨论】:

  • 在这种情况下,您也不需要这样做,因为 requestuser 在模板中自动可用,这要归功于默认的上下文处理器。

标签: django django-templates


【解决方案1】:

他们是正确的,一般来说你最有可能遇到以下模式

def my_view(request):
    user = request.user
    context = {'user': user}
    return render(request=request, template_name='test.html', context=context)

<p>hello, {{ user.username }}</p>

通常你不会传递request,而是直接传递user。然后由于可能有许多相关的user 方法,因此模板中使用了user.&lt;something&gt; 表示法。

但是,根据您的用例,如果您需要用户提供的唯一字段是该页面上的用户名,则直接传递它没有任何问题。

【讨论】:

    猜你喜欢
    • 2012-02-29
    • 2014-01-25
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2011-09-28
    • 2018-11-25
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多