2016-03-25 3 views
0

Ich schreibe eine Ansicht, die benutzerdefinierte CSS-Dateien für eine Umfrage-Anwendung erstellt (der Benutzer wählt ihre Farben, und dann eine CSS-Datei gespeichert ist, bereit für die Verwendung in ihrer Umfrage). Es ist eine große CSS-Datei (etwa 1 k Zeilen).Kontextuelle Alternative zu riesigen Heredoc in Python/Django

Ich versuche zu vermeiden, eine riesige Liste von Strings zusammenfügen, mit meinen Variablen als Trennzeichen. Gibt es ein Kontext-Prozessor-Äquivalent, das über meine Ansicht zugänglich ist, wo ich einfach die base.css-Datei und ein Wörterbuch mit Variablen (ähnlich wie django.shortcuts.render) übergeben und dann die resultierende Zeichenfolge abrufen und als Datei über das ORM speichern kann? (Ich habe ein CSS-Modell mit einem dedizierten FileField dafür)

Ich würde es vorziehen in der Lage zu erzeugen, dann speichern Sie eine statische Datei, anstatt eine dynamische CSS-Datei über den Kontext-Prozessor für jede Seite zu produzieren.

+0

ich nicht wirklich verstehe Ihre Frage . Warum können Sie das Vorlagensystem nicht verwenden? –

Antwort

0

So wie @DanielRoseman vorgeschlagen, ist es tatsächlich möglich, eine CSS-Datei über den integrierten Django-Kontext-Prozessor auszuführen. Erstens ersetzen die SCSS $variables mit so etwas wie dies in der Sass-Datei und neu zu kompilieren:

@function myvariable(){ 
    @return unquote("{{ cssform.myvariable.value }}"); 
} 

Dann geben Sie einfach es durch den Kontext Prozessor aus Ihrer Sicht:

if request.method == "POST": 
    form = CSSForm(request.POST) 
    if form.is_valid(): 
     t = TemplateResponse(request, 'base.css', {"cssform": form}) 
     t.render() 
     css_string = t.content 
     #now do something with your css_string