2017-12-04 3 views
0

Für jede Instantiierung eines Objekts in der Vorlage möchte ich die zugehörige ImageField-URL extrahieren, um das Foto anzuzeigen. Aber ich habe Probleme, einen Weg zu finden dies ohne Inline-Styling zu tun:Wie kann ich das Inline-Styling vermeiden und dennoch die Templating-Sprache nutzen?

{% for entry in entries %} 
     <div class="row"> 
     <div class="col s4"> 
      <div class="card-panel" style="background-image: url('{{entry.image.url}}');"> 

     <h1>{{entry.title}}</h1> 

     </div></div></div> 
    {% endfor %} 

Dies funktioniert in jedem Einzelbild der Vorlage zu bringen, aber ich frage mich, ob ich kann abstrahieren nur die CSS meine CSS zu halten eine separate Datei.

edit: Gleiches gilt für die <img> tag:

<img src="{{ entry.image.url }}">

dies in der Vorlage, wäre dynamisch. Aber ich könnte dies nicht als background-image

+0

Verwenden Sie '

+0

@RajaSimon same situation for the Tag. Ich werde in einem Beispiel in den Beitrag bearbeiten – Homer

+2

Es gibt keine Möglichkeit, Sie können einen dynamischen Stil mit einem statischen CSS haben. –

Antwort

1

Es ist möglich, das Django-Vorlagensystem zu verwenden, um CSS zu rendern und dynamische CSS-Dateien zu erstellen. Ich empfehle das nicht, aber wenn Sie wirklich wollen, können Sie es wie normale URL/Ansicht einrichten.

Zum Beispiel würde Ihre urls.py etwas wie dieses

url(r'^dynamic_style/(?P<pk>\w+)$', dynamic_style, name='dynamic')

Dann Ihrer Ansicht nach so etwas wie

def dynamic_style(request, pk): 
    entry = get_object_or_404(Entry, pk) 

    return render_to_response('dynamic_style.css', { 
     'image_url': entry.image.url 
    }, content_type='text/css') 

Dann in Ihrer Vorlage aussehen würden Sie haben könnten

<link href="{% url 'dynamic_style' pk=entry.id %}" rel="stylesheet"> 

Dies ist eine klobige Möglichkeit, CSS zu generieren. Wenn Sie inline wie oben beschrieben verwenden können, ist es viel besser.

Verwandte Themen