Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: Include Media (css/js) in Class-Based Views

I am updating old django code from method-based views to class-based views.

I know how to include media (css/js) in forms via the Media class

How can I use the media class if my class based view does not contain any forms?

like image 759
guettli Avatar asked May 30 '26 12:05

guettli


2 Answers

CSS/JS are usually managed in the template itself and not in the view. See https://docs.djangoproject.com/en/1.10/howto/static-files/

For example, use base.html:

<!DOCTYPE html>
<html>
    <head>

        <title>
            {% block page_title %}{{ page_title }}{% endblock %}
        </title>

        {% block css %}
        {% endblock %}

    </head>
    <body>

        {% block main %}
        {% endblock %}

        {% block scripts %}
        {% endblock %}

    </body>
</html>

and extend it with my_page.html:

{% extends "base.html" %}
{% load staticfiles %}

{% block page_title %}
Hello!
{% endblock %}

{% block css %}
    <link href="{% static "page.css" %}" rel="stylesheet"/>
{% endblock %}

{% block main %}
Yo!
{% endblock %}

{% block scripts %}
    <script src="{% static 'my_scripts.js' %}"></script>
{% endblock %}
like image 111
Udi Avatar answered Jun 02 '26 06:06

Udi


Django Sekizai is meant for this:

Here is the example from their documentation:

{% load sekizai_tags %}

<html>
<head>
{% render_block "css" %}
</head>
<body>
Your content comes here.
Maybe you want to throw in some css:
{% addtoblock "css" %}
<link href="/media/css/stylesheet.css" media="screen" rel="stylesheet" type="text/css" />
{% endaddtoblock %}
Some more content here.
{% addtoblock "js" %}
<script type="text/javascript">
alert("Hello django-sekizai");
</script>
{% endaddtoblock %}
And even more content.
{% render_block "js" %}
</body>
</html>

This example shows everything in one template, but - of course - you can split that into multiple templates either by inheritance or includes and use the addtoblock directives in any of the partial templates.

A more complex, real life example is also in their documentation.

like image 42
Risadinha Avatar answered Jun 02 '26 08:06

Risadinha