首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django中的templatetags vs context

django中的templatetags vs context
EN

Stack Overflow用户
提问于 2020-01-11 07:22:34
回答 1查看 31关注 0票数 0

在使用django之后,我发现似乎有两种方法可以将数据传递到html页面。例如,如果我有一个名为Products的模型,我可以

views.py

代码语言:javascript
运行
复制
context = {
        'products' : Products.objects.all()
    }

    return render(request, 'products/product_page.html', context)

product_page.html

代码语言:javascript
运行
复制
{% for post in posts %}
    //do stuff with {{post}}
{% endfor %}

或者我可以这样做

product_tags.py

代码语言:javascript
运行
复制
register = template.Library()

@register.simple_tag
def get_Products():
    return Products.objects.all()

product_page.html

代码语言:javascript
运行
复制
{% load product_tags %}
{% get_Products as elections %}
    //do stuff with {{elections}}

一种方式比另一种方式更好吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-11 10:19:30

可能的重复项:

stack Q/A

在你的例子中,如果你只使用一次,我猜它的性能是一样的。

但是在某些情况下,如果你不得不"get_Products“两次,这是对数据库访问的浪费。

上下文对我来说是一种常见的方式。只有当我需要得到一些非常具体的东西时,才写模板标签,比如在for循环上有3个不同模型的查询。

看看我的例子:

代码语言:javascript
运行
复制
@register.simple_tag
def get_skipper_in_training_finish_datetime(training, user):
   skipper = training.get_skipper_in_training(user)
   if skipper:
       return skipper.finish_datetime

我在活动查询中有3个不同的模型,其中只有一个有"finish_datetime“。

使用包含此应用程序的所有模板标签的视图

代码语言:javascript
运行
复制
{% load utils %}

{% regroup activities by start_date|date:'d-m-Y' as activities_by_date %}
    {% for start_date in activities_by_date %}

       {% for activity in start_date.list %}
          ...

          {% if "Training" in activity.model_name %}
             <script>
                 {% get_skipper_in_training_finish_datetime activity user as skipper_finish %}
                 document.write($.format.toBrowserTimeZone("{{ skipper_finish |date:'c' }}", "HH:mm:ss"))
             </script>
          {% elif activity.end_date %}
              <script>document.write($.format.toBrowserTimeZone("{{ activity.end_date|date:'c' }}", "dd-MM-yyyy"))</script>
          {% else %}
             -
          {% endif %}

        ...

       {% endfor %}

       ...

    {% endfor %}

Django Docs在谈论模板标记时并不是指性能

Custom template tags and filters

但正如你所看到的,这是一个逻辑和复杂的模型使用问题。

希望我能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59690210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档