Django, использовать стиль из базы данных - PullRequest
0 голосов
/ 30 августа 2018

В моей базе данных есть стиль, и я хочу использовать его в шаблоне, но я не знаю, как.

models.py

class Post(models.Model):
    # ...

    body = models.TextField()  # HTML
    style = models.TextField()  # CSS

    # ...

views.py (я не знаю, будет ли это полезно)

# ...
# Context have to be get to every template extends form 'base.html'
base_context = {
    "category": Category.objects.all(),
}

# ...

def detail(request, slug, day, month, year):
    context = base_context.copy()
    context['post'] = Post.objects.get(slug=slug,
                                            created__day=day,
                                            created__month=month,
                                            created__year=year)
    return render(request, 'post/detail.html', context)

# ...

Я пытался:

{# ... #}

<style>
    {{ post.style }}
</style>

{# ... #}

(я знаю, как использовать стили, сохраненные в «статическом» каталоге)

Я использую django 2.1 и python 3.7.

1 Ответ

0 голосов
/ 30 августа 2018

Это не так сложно, но требует нескольких шагов. Вам необходимо:

  1. создать 2 новых файла (например, styling.py, post.css)
  2. изменить вашу модель
  3. изменить базовый шаблон

styling.py

from django.template.loader import render_to_string


def get_style(post):
     return render_to_string('post.css', {'post': post})

post.css

{% if post.style %}
    {{ post.style }}
{% endif %}

или если вы хотите сохранить только одно значение в вашем поле стиля, например, background-color

{% if post.style %}
    background-color: {{ post.style }}
{% endif %}

в вашем model.py

from styling import get_style

class Post(models.Model):
    ...
    style = models.TextField()  # CSS
    ....

    def get_style_sheet(slef):
        return get_style(self)

в базовом шаблоне добавьте следующее, но убедитесь, что у вас есть post объект в контексте

base.html

<html>
<head>
    {% if post %}
    <style>
    {{ post.get_style_sheet()|safe }}
    </style>
    {% endif %}
</head>
...