#python-3.x #django
#python-3.x #django
Вопрос:
Я новичок в django; Я использую include внутри шаблона, который вызывает другой шаблон, подобный этому
{% include "cars_models.html" with user_id=request.user.id %}
есть ли способ использовать Cars.objects.get(user_id=request.user.id)
или что-то подобное внутри шаблона cars_models напрямую, чтобы получить все автомобили, связанные с идентификатором пользователя, без использования представлений
Я пытаюсь использовать шаблоны cars_models внутри других шаблонов, таких как виджеты для базового шаблона. Я не использую какое-либо представление для своего базового шаблона
Комментарии:
1. Затем вы можете попробовать использовать тег шаблона.
2. @AndreyBorzenko Я не понимаю
3. Если вы не можете использовать представления, но все же хотите выполнить код python для шаблона, вы можете создать свой пользовательский тег шаблона: docs.djangoproject.com/en/3.1/howto/custom-template-tags .
4. @Melvyn — это не то, что я ищу, я пытаюсь использовать шаблоны автомобилей внутри других шаблонов, таких как виджет, чтобы не создавать другое представление, которое возвращает мне автомобили
5. @Melvyn У меня нет представления для базового шаблона
Ответ №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)
- Добавьте библиотеку с вашим тегом в settings.py в ШАБЛОНЫ / ПАРАМЕТРЫ:
'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',
}
},
- В вашем шаблоне загрузите свой тег в верхней части шаблона:
{% load car_tags %}
- Используйте свой тег в своем шаблоне таким образом:
{% car_tag request.user.id %}
Комментарии:
1. Я получаю эту ошибку
django.core.exceptions.ImproperlyConfigured: Unknown parameters: libraries
2. Я обнаружил, что ошибка отсутствовала в шаблоне импорта django
3. Я сделал именно то, что вы сказали, я получаю эту ошибку
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'
4. Пожалуйста, покажите, как вы используете {% load car_tags %} в верхней части вашего шаблона.
5. Пожалуйста, используйте тег таким образом {% 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 — это связанный менеджер вашей модели.
Комментарии:
1. Не вижу, что вы хотите. Я не использую никаких представлений. Вы можете использовать car_set.all внутри cars_models.
2. извините, я не очень хорошо понял ваш ответ, но то, что я пытаюсь сделать, это использовать шаблон, подобный виджету, внутри базового шаблона, и я не использую какое-либо представление для своего базового шаблона