29👍
You can move any CSS that contains static file paths to inline CSS, contained in the template.
i.e.
<div style="background: url('{% static 'logo.png' %}')"></div>
The catch here is that it won’t work for @media queries, you’d need to put those in a block, e.g.
<style>
@media (min-width: 1200px){
background: url('{% static 'logo.png' %}');
}
</style>
- [Django]-How do I return a 401 Unauthorized in Django?
- [Django]-Foreign Key Django Model
- [Django]-How to query Case-insensitive data in Django ORM?
24👍
Use absolute URL from base directory, this will point to any file in a static folder within an app
settings.py:
STATIC_URL = '/static/'
style.css:
background-image: url('/static/img/sample.jpg');
- [Django]-Where should utility functions live in Django?
- [Django]-Django migration strategy for renaming a model and relationship fields
- [Django]-Images from ImageField in Django don't load in template
16👍
If you want to use {% static %}
tag in your CSS file, you should use {% include %} tag. Here is an example to do so:
foo.html
{% load static %}
{% load i18n %}
{% load widget_tweaks %}
<!DOCTYPE html>
<html>
<head>
<style>
{% include "path/to/custom_styles_1.css" %}
</style>
<link rel="stylesheet" href="{% static 'css/custom_styles_2.css' %}">
</head>
<body>
<!-- Your HTML body -->
</body>
</html>
custom_styles_1.css
{% load static%}
{
background: url('{% static "/img/logo.png" %}')
}
custom_styles_2.css
.fa {
position: relative;
text-align: center;
font-family: BTitrBold;
font-size: 3.5em;
}
.name {
position: absolute;
top: 37%;
right: 15%;
}
.school {
position: absolute;
top: 530px;
right: 200px;
}
.id {
position: absolute;
top: 700px;
right: 200px;
}
.degree {
position: absolute;
top: 740px;
left: 195px;
}
custom_styles_1.css
is the CSS file that includes {% static %}
tag. You should integrate it with your foo.html file with {% include %}
tag. In this way, Django will put all the styles you need at the appropriate place and render the static tags correctly.
custom_styles_2.css
is a normal CSS file located in STATIC_ROOT
directory, so you can use {% static %}
tag for it without any problem.
- [Django]-Django select_for_update cannot be used outside of a transaction
- [Django]-How to return custom JSON in Django REST Framework
- [Django]-Timestamp fields in django
5👍
See this similar stackoverflow question.
The only way to do what you want is to generate your CSS through Django. HTML is usually associated with Django views and templates, but in truth, you can return any file type: CSS, JavaScript, plain text, etc. However, doing so will add overhead to your site, so setting proper HTTP headers and server-side caching of the generated file will be very important.
Basic method:
return render_to_response('stylesheet.css',
{ 'domain': 'http://static.mydomain.com/' },
context_instance=RequestContext(request),
mimetype='text/css'
)
Alternatively, you can set up hosts on your system that map the static domains back to localhost for development purposes. Then, you can reference the domain as normal, but it’ll still pull from your development files. Also, if you happen to have Ruby installed on your system, you can make use of a rubygem called Ghost. It lets you easily create, enable, disable, and delete custom hosts right from the command-line with no fuss.
- [Django]-PHP Frameworks (CodeIgniter, Yii, CakePHP) vs. Django
- [Django]-How to add data into ManyToMany field?
- [Django]-Django – "no module named django.core.management"
4👍
If you’re using django-libsass to generate your css, you can use custom functions to bridge django and the sass precompiler.
As a matter of fact, the function static
is already implemented, and you can use it:
.foo {
background: url(static("myapp/image/bar.png"));
}
as described here:
https://github.com/torchbox/django-libsass#custom-functions
- [Django]-How to deal with "SubfieldBase has been deprecated. Use Field.from_db_value instead."
- [Django]-Django ManyToMany filter()
- [Django]-What is the easiest way to clear a database from the CLI with manage.py in Django?
3👍
There might be a way to get django to treat the CSS file like a template (I’m not very familiar with django) but you might want to try a different solution instead: use a dynamic stylesheet language such as LESS or Sass. With LESS it would be as simple as
@base: "//static.example.com/"
#logo {
background: url(%("%s/logo.png", @base))
}
- [Django]-Can I have a Django model that has a foreign key reference to itself?
- [Django]-Django simple_tag and setting context variables
- [Django]-Django 1.8: Create initial migrations for existing schema
0👍
Okay, 10 years down the line and I am facing this now. Here is my fix which will save you some trouble.
PS Not really sure if it is ethical however
- grab your CSS file and place it in Templates
In your html
file,
<style>
{% include 'path/to/css' %}
</style>
Solved my problems.
- [Django]-Django Rest framework, how to include '__all__' fields and a related field in ModelSerializer ?
- [Django]-Malformed Packet: Django admin nested form can't submit, connection was reset
- [Django]-Django: How to build a custom form widget?
-6👍
If your images aren’t too big you can use data URIs, which can be embedded right in the css file without any links. They look like this:
.box-with-background {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgI=')
background-repeat: repeat;
}
Usually they’re a bit longer then the one I’ve shown. You can generate them with javascript and you can find some online generators.
- [Django]-How to produce a 303 Http Response in Django?
- [Django]-Why Django model signals are not working?
- [Django]-What is the best way to upload files in a modern browser