在我的 jinja2 模板中使用 url 作为变量?

Posted

技术标签:

【中文标题】在我的 jinja2 模板中使用 url 作为变量?【英文标题】:Use the url as a variable in my jinja2 template? 【发布时间】: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 % 

【问题讨论】:

【参考方案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+),那么页面需要很长时间才能回答,从而可以看出差异。

以上是关于在我的 jinja2 模板中使用 url 作为变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 Sendgrid 事务模板中包含 Jinja2 模板

在 Jinja2 模板引擎中使用 django-widget-tweaks

使用url模块和jinja2模板

jinja2渲染使用

使用 jinja2 作为 django 模板引擎时出错:无法导入名称“环境”

在 Django 模板中使用外键作为变量