【问题标题】:django using object inside templates without using viewdjango 在模板中使用对象而不使用视图
【发布时间】:2020-10-11 00:23:22
【问题描述】:

我是 Django 新手;我在一个模板中使用包含调用另一个这样的模板

{% include "cars_models.html" with user_id=request.user.id %}

有没有办法使用Cars.objects.get(user_id=request.user.id) 或类似cars_models 模板中的东西直接让所有汽车都与user_id 相关而不使用视图

我正在尝试在另一个模板中使用 cars_models 模板,例如基本模板的小部件。我的基本模板没有使用任何视图

【问题讨论】:

  • 你可以尝试使用模板标签。
  • @AndreyBorzenko 我不明白
  • 如果您不能使用视图,但仍想为模板执行 python 代码,您可以创建自定义模板标签:docs.djangoproject.com/en/3.1/howto/custom-template-tags
  • @Melvyn 我没有基本模板的任何视图

标签: python-3.x django


【解决方案1】:

请考虑这个自定义模板标签解决方案:

  1. 在根目录中创建目录“templatetags”。在文件夹中创建文件 car_tags.py,将这段代码添加到该文件中:
from django import template
register = template.Library()

from app_name.models import Car
@register.simple_tag
def car_tag(id):
    return Cars.objects.get(user_id=id)
  1. 将带有标签的库添加到 settings.py 到 TEMPLATES/OPTIONS 中:
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'libraries': {
                'car_tags': 'templatetags.car_tags',
            }
        },
  1. 在您的模板中,在模板顶部加载您的标签:{% load car_tags %}
  2. 以这种方式在模板中使用您的标签:{% car_tag request.user.id %}

【讨论】:

  • 我收到此错误django.core.exceptions.ImproperlyConfigured: Unknown parameters: libraries
  • 我发现 django 导入模板中缺少错误
  • 我完全按照你说的做了我收到了这个错误Invalid block tag on line 4: 'car_tag'. Did you forget to register or load this tag?。我确实尝试更改为{{ car_tag request.user.id }},但我得到了Could not parse the remainder: ' request.user.id' from 'car_tag request.user.id'
  • 请在模板顶部显示您如何使用 {% load car_tags %}。
  • 请这样使用标签{% car_tag request.user.id %},这是正确的。看起来加载不正确。
【解决方案2】:

不,您不能在模板中使用查询集。您需要在视图中创建一个并将其作为上下文传递给您的模板。

但如果你的模型是这样的:

class Car(models.Model):
    user = models.ForeignKey(User)

您可以在模板中调用与登录用户相关的所有汽车:

{% for car in request.user.car_set.all %}
    <p>{{car}}</p>
{%endfor%}

car_set 是您的模型的RelatedManager

【讨论】:

  • 看不到你想要的。我没有使用任何视图。您可以在 cars_models 中使用 car_set.all。
  • 对不起,我没有很好地得到你的答案,但我想做的是在基本模板中使用像小部件这样的模板,我没有为我的基本模板使用任何视图跨度>
猜你喜欢
  • 2020-07-05
  • 2013-04-10
  • 2011-03-04
  • 2016-04-19
  • 2019-03-14
  • 2018-01-29
  • 2020-12-18
  • 2018-04-06
  • 2012-07-26
相关资源
最近更新 更多