【问题标题】:Use the url as a variable in my jinja2 template?在我的 jinja2 模板中使用 url 作为变量?
【发布时间】:2021-02-03 18:50:12
【问题描述】:

是一种在我的模板中使用 slug 的方法吗?

我的网址中有:

path("cats/check/<int:pk>/lista", ObjetoListView.as_view(), name='posesiones_consulta'),

如何将 int:pk 作为变量访问?

我想评价一下:

{% if cat.mom.id == pk %} 

【问题讨论】:

    标签: django django-templates jinja2


    【解决方案1】:

    你将它传递给上下文:

    class ObjectoListView(ListView):
    
        # …
    
        def get_context_data(self, *args, **kwargs):
            return super().get_context_data(
                *args,
                pk=self.kwargs['pk'],
                **kwargs
            )

    如果您想要过滤列表,您应该在数据库级别执行此操作,例如:

    class ObjectoListView(ListView):
    
        # …
    
        def get_queryset(self, *args, **kwargs):
            return super().get_queryset(*args, **kwargs).filter(
                mom__pk=self.kwargs['pk']
            )

    在模板中过滤不是一个好主意,因为这样数据库将返回所有条记录,从而增加数据库和应用程序之间的带宽,并且此外,数据库级别的过滤(几乎)总是比视图或模板中的过滤更快。

    【讨论】:

    • 谢谢,但是如果我打算使用我的电脑而不是互联网,哪个更快?
    • @TommydoNascimiento:仍然是一个数据库。数据库使用 indexes,因此通常可以在 O(log n) 时间内过滤,而模板/视图将需要线性时间。如果对象的数量增加(1'000+),那么页面需要很长时间才能回答,从而可以看出差异。
    猜你喜欢
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多