Vraag Django-Compressor gooit UncompressableFileError


Ik gebruik django-compressor en django-staticfiles (de externe versie, ik ben op Django 1.2).

Wanneer ik mijn site probeer te laden, krijg ik een foutmelding:

TemplateSyntaxError: Caught UncompressableFileError while rendering: 'css/facebox.css' isn't accesible via COMPRESS_URL ('/static/') and can't be compressed

Ik heb het nagevraagd COMPRESS_URL is gelijk aan STATIC_URLen het bestand is eigenlijk toegankelijk via die URL.

Toen ik naar de django-compressorcode keek, ontdekte ik waar die uitzondering werd gegooid:

 def get_basename(self, url):
        try:
            base_url = self.storage.base_url
        except AttributeError:
            base_url = settings.COMPRESS_URL
        # I added the following print statement:
        print "url: %s, base_url: %s" % (url, base_url)
        if not url.startswith(base_url):
            raise UncompressableFileError("'%s' isn't accesible via "
                                          "COMPRESS_URL ('%s') and can't be "
                                          "compressed" % (url, base_url))

De eerste {% compress css %} blok in mijn sjablonen is dit:

{% compress css %}
<link rel="stylesheet" href="/static/css/blueprint/screen.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/facebox.css" />
{% endcompress %}

(Merk op dat de eerste link niet gebruikt {{ STATIC_URL }}, maar de tweede doet)

En ik krijg dit in mijn foutenlogboek:

[Thu Oct 13 08:19:13 2011] [error] url: /static/css/blueprint/screen.css, base_url: /static/
[Thu Oct 13 08:19:13 2011] [error] url: /static/css/facebox.css, base_url: /static/
[Thu Oct 13 08:19:14 2011] [error] url: /static/css/blueprint/screen.css, base_url: /static/
[Thu Oct 13 08:19:14 2011] [error] url: css/facebox.css, base_url: /static/

Zoals u kunt zien, wordt het bestand screen.css twee keer verwerkt en de tweede keer succesvol. Het facebox.css-bestand mislukt echter de tweede keer, vermoedelijk omdat het {{ STATIC_URL }} is niet gedefinieerd in de sjablooncontext de tweede keer dat het bestand wordt geparseerd.

Uiteraard kon ik het probleem oplossen door het niet te gebruiken {{ STATIC_URL }}, maar dat is geen acceptabele oplossing.

Waarom zouden mijn CSS-bestanden twee keer worden verwerkt? Ze hadden oorspronkelijk media='screen, projection', maar ik verwijderde dat denken dat het het probleem veroorzaakte.

Relevante instellingen:

In [4]: from compressor.conf import settings

In [5]: settings.COMPRESS_ROOT
Out[5]: '/home/ianchat/static_files'

In [6]: settings.STATIC_ROOT
Out[6]: '/home/ianchat/static_files'

In [7]: settings.COMPRESS_URL
Out[7]: '/static/'

In [8]: settings.STATIC_URL
Out[8]: '/static/'

In [9]: settings.COMPRESS_OUTPUT_DIR
Out[9]: 'CACHE'

In [10]: settings.COMPRESS_CSS_FILTERS
Out[10]: ['compressor.filters.csstidy.CSSTidyFilter']

In [11]: settings.STATICFILES_FINDERS
Out[11]: 
('staticfiles.finders.FileSystemFinder',
 'staticfiles.finders.AppDirectoriesFinder',
 'staticfiles.finders.LegacyAppDirectoriesFinder',
 'compressor.finders.CompressorFinder')

22
2017-10-13 13:38


oorsprong


antwoorden:


Ik kwam hetzelfde probleem tegen.

Het antwoord is hier gevonden: https://github.com/jezdez/django_compressor/pull/206 De oplossing van de link doet handler500. Ik besloot de 500.html-sjabloon te wijzigen om er {{STATIC_URL}} in te voorkomen en het probleem is opgelost.


6
2018-06-24 19:41



Het lijkt er bijna op dat STATIC_URL niet in uw context is. Je hebt wel de staticfiles contextprocessor geconfigureerd, toch? Heb je geprobeerd het bestand te liken zonder de compressortags? Wordt {{STATIC_URL}} correct weergegeven op de pagina wanneer u deze laadt?

Ik denk dat de compressor de URL controleert, zelfs als deze er via het bestandssysteem naar kijkt https://github.com/jezdez/django_compressor/blob/develop/compressor/base.py#L57


1
2017-10-22 20:48



Dit is een oude vraag, maar een van de weinige zoekresultaten bij het zoeken naar deze foutmelding, dus het kan de moeite waard zijn om mijn oplossing te delen.

In mijn geval was het een doodeenvoudig geval: ik codeerde mijn statische URL hard en vergat de / in het begin. Dus ik had dit:

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

Dat gaf me de fout. Na het veranderen hiervan:

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

Het was opgelost. Natuurlijk besefte ik later dat ik de instelling STATIC_URL had moeten gebruiken:

<link type="text/css" rel="stylesheet" href="{{ STATIC_URL }}style.css" />

Ik hoop dat dit iedereen helpt.


1
2018-06-15 23:12



Ik heb er nog een paar bekeken en ik ben er vrij zeker van dat de uitzondering wordt veroorzaakt door een niet-gecrashte foutpagina weer te geven zonder de volledige context die de eerste pass had. Dit veroorzaakt de uitzondering in de django-compressor. [1]

De oplossing is natuurlijk om alle fouten af ​​te handelen.

[1] Ik gebruik ook een niet-standaard code om statische pagina's weer te geven, misschien stoort dit en de reden dat de bug niet al te vaak is.


0
2017-12-28 14:39



Ik kwam hetzelfde probleem tegen; in mijn geval werd het probleem veroorzaakt door het gebruik COMPRESS_OFFLINE_CONTEXT - wat niet zo is .update() de context maar het vervangt het geheel en verwijdert het aldus STATIC_URL. De oplossing in mijn geval was het gewoon toevoegen aan de COMPRESS_OFFLINE_CONTEXT, na de import van local_settings, anders zou elke opheffing daar niet hebben gewerkt.


0
2017-12-08 10:08



Lijkt je settings.COMPRESS_URL moet statisch worden van uw systeem, niet van de URL zelf.

Probeer bij uw instellingen de COMPRESS_URL waarde voor:

# in case your static is on same level than settings.py (usually are)
COMPRESS_URL = r'%s/static' % os.path.abspath(os.path.dirname(__file__))

Werk uw foutenlogboek bij met de nieuwe informatie of met mijn antwoordopmerkingen.


-2
2017-10-13 14:55