2

Я хочу сжать JS и CSS в моем проекте Python на Jinja2 для Google App engine. Я установил django-конвейер и добавил его к моему пути к проекту.Как вызвать компрессор django-конвейера с шаблонами jinja2

Некоторые из documentation не ясны для меня. В частности, использование Jinja2.

для Django шаблоны, в base.html example, вставки:

{% load compressed %} 
{% compressed_css 'colors' %} 
{% compressed_js 'stats' %} 

Я предполагаю, что эквивалент Jina2 будет что-то вроде

{{ compressed_css("main") }} 
{{ compressed_js("main") }} 

Но это дает UndefinedError: 'compressed_css' является undefined

Мой вопрос: Как загрузить «сжатый» шаблон в Jinja2? Это не сделано так же, как Django, и я не могу найти пример.

Документы также говорят

In order to use Django Compressor’s Jinja2 extension we would need to pass compressor.contrib.jinja2ext.CompressorExtension into environment:

Я сделал это.

import jinja2 
from compressor.contrib.jinja2ext import CompressorExtension 
env = jinja2.Environment(extensions=[CompressorExtension]) 

Документы также заявляют

"Unlike the Django template tag implementation the Jinja2 implementation uses different templates, so if you wish to override them please override pipeline/css.jinja and pipeline/js.jinja."

Я не уверен, что мне нужно сделать что-нибудь здесь.

Мой setings.py включает следующие утверждения:

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
#  'django.template.loaders.eggs.Loader', 
) 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 

    # Uncomment the next line for simple clickjacking protection: 
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 

ROOT_URLCONF = '{{ project_name }}.urls' 

# Python dotted path to the WSGI application used by Django's runserver. 
WSGI_APPLICATION = '{{ project_name }}.wsgi.application' 

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, "templates"), 
    os.path.join(PROJECT_PATH, "templates/includes") 
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'rest_framework_swagger', 
    'django_jinja.contrib._pipeline', 
    # Uncomment the next line to enable the admin: 
    # 'django.contrib.admin', 
    # Uncomment the next line to enable admin documentation: 
    # 'django.contrib.admindocs', 
) 


SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer' 

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse' 
     } 
    }, 
    'handlers': { 
     'mail_admins': { 
      'level': 'ERROR', 
      'filters': ['require_debug_false'], 
      'class': 'django.utils.log.AdminEmailHandler' 
     } 
    }, 
    'loggers': { 
     'django.request': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': True, 
     }, 
    } 
} 

STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage' 
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    'pipeline.finders.PipelineFinder' 
) 
PIPELINE_ENABLE = True 
PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.closure.ClosureCompressor' 
PIPELINE_CLOSURE_BINARY = 'C:\bunjilsrc\tools\minify\minify.bat' 
PIPELINE_DISABLE_WRAPPER = True 
PIPELINE_ENABLE_GAE_SUPPORT = True 

STATIC_ROOT = 'static/' 
STATIC_URL = '/static/' 
MEDIA_ROOT = 'uploads/' 
MEDIA_URL = "/media/" 

PIPELINE_JS = { 
    'main': { 
     'source_filenames': (
      'js/site.js ' 
     ), 
     'output_filename': 'js/main.js' 
    }, 
    'vendor': { 
     'source_filenames': (
      'js/vendor/jquery.js', 
     ), 
     'output_filename': 'js/vendor.js' 
    } 
} 

PIPELINE_CSS = { 
    'main': { 
     'source_filenames': (
      'bootstrap.css', 
      'site.css' 
       ), 
     'output_filename': 'css/main.css' 
    } 
} 
+0

Правильный синтаксис для a выглядит как {% {javascript 'main'%} {% {stylesheet 'main'%} Однако он не загружает словарь PIPELINE_JS в settings.py. Pipeline 1.5 добавляет поддержку Django 1.8, но снижает поддержку Django 1.6. Однако движок google-app поддерживает только Django 1.5.8. Таким образом, могут возникнуть проблемы с совместимостью. Публичных примеров проектов с использованием шаблонов jinja2, django-pipe и приложений не существует. Попробуй что-нибудь еще? – intotecho

ответ

0

Отправляясь описывать вещи, которые работали для меня на местном окр (не GAE).

Если следовать django-pipeline official guide говорится, что вы должны добавить pipeline.templatetags.ext.PipelineExtension к среде, которая для меня означает обновление моего settings.py к этому:

# myproject/settings.py 
TEMPLATES = [ 
    { 
    ... 
    }, 
    { 
     'BACKEND': 'django.template.backends.jinja2.Jinja2', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'environment': 'myproject.jinja2.environment', 
      'extensions': ['pipeline.templatetags.ext.PipelineExtension'] 
     } 
    } 
] 

Как перенести шаблон? Для меня это было легко, я просто удалил {% load pipeline %} с верхней части шаблона, и он сработал.

 Смежные вопросы

  • Нет связанных вопросов^_^