Django шаблон: Показать объект в шаблоне, не используя представление - PullRequest
1 голос
/ 25 марта 2020

Это кажется слишком простым, но я пытаюсь показать объект в своем шаблоне, и я не могу использовать представление на основе функций / классов, потому что это должно быть на основе. html шаблон (для всех представлений ).

Я полностью понимаю проблему, поскольку могу заставить ее работать, когда я определяю объект как переменную в представлении. Мой вопрос на самом деле о том, как заставить его работать, когда не используется view.py

base. html

<!-- works -->
{{ user.username }}
<!-- doesn't work -->
{{ custom_model.field }}

Я извлек Django язык шаблонов и используя их модель истории в качестве примера.


Дополнительная информация Надеемся, что ответ на вопрос Виллема Ван Онсема.

Я добавлю заголовки по всему сайту в панели навигации. Может быть, есть лучший способ сделать это?

models.py

class Headline(models.Model):
    description = RichTextUploadingField(blank=True, null=True)
    active = models.BooleanField(default=False)

context_processors.py # Дополнения после создания вопроса

def active_headline(request):
    from portfolios.models import Headline
    return {'headline': Headline.objects.filter(active=True)}

settings.py # Дополнения после создания вопроса

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                # for site-wide headlines
                'portfolios.context_processors.active_headline'
            ],
        },
    },
]

base. html

{{ headline | truncatechars_html:150 | safe }}
  • здесь возникают некоторые проблемы рендеринга, когда HTML не отображается, но текст и скобки набора запросов [] отображаются на моей странице.

1 Ответ

1 голос
/ 25 марта 2020

Вы можете «добавить» дополнительные данные в свои шаблоны, используя пользовательские контекстные процессоры [Django -doc] :

Таким образом, вы можете определить контекстный процессор, например, в app/context_processors.py:

# app/context_processors.py

def <b>some_model_object</b>(request):
    from app.models import SomeModel
    return {'my_object': SomeModel.objects.first()}

Затем в ваших настройках вы добавляете свой пользовательский контекстный процессор:

# settings.py

# &hellip;

TEMPLATES = [
    {
        # &hellip;
        'OPTIONS': {
            'context_processors': [
                # &hellip;
                <b>'app.context_processors.some_model_object'</b>
            ]
        }
        # &hellip;
    }
]

Если вы сейчас визуализируете шаблон, тогда Django автоматически добавит элементы, возвращенные в словаре процессора пользовательского контекста, в контекст шаблона.

...