Ankit Kumar Verma
Ankit Kumar Verma

Reputation: 435

How to link static files in django, if the path is provided by the context in html?

Here is my views.py file:

from django.shortcuts import render

def page(request):
    css = 'temp/css.css'
    return render(request, 'temp/index.html', {'css': css})

and templates/temp/index.html file:

{% load static %}
<!DOCTYPE html>
<html>
    <head>
            <link rel="stylesheet" type="text/css" href="{% static '{{ css|safe }}' %}">
    </head>

    <body>
        Hello Page
    </body>

</html>

and static/temp/css.css file:

* {
    width: 100vw;
    height: 100vh;
    background: red;
}

After rendering source of the page is:

<!DOCTYPE html>
<html>
    <head>
            <link rel="stylesheet" type="text/css" href="/static/%7B%7B%20css%7Csafe%20%7D%7D">
    </head>

    <body>
        Hello Page
    </body>

</html>

but I am expecting

...
<link rel="stylesheet" type="text/css" href="/static/temp/css.css">
...

Why it is not working? Is there any way to do this? How to link a static file if the path is provided by the context in html?

Upvotes: 2

Views: 601

Answers (2)

Matt Gleason
Matt Gleason

Reputation: 321

Assuming 'css' is your context variable, you should be able to just do the below. Basically drop the quotes around the 'css' variable.

<link rel="stylesheet" href="{% static css %}">

Upvotes: 3

Jack
Jack

Reputation: 470

You should add <link rel="stylesheet" type="text/css" href="/static/temp/css.css"> to your index.html directly. That way it will take care of itself and you don't need to pass it as the context.

Upvotes: 0

Related Questions