2014-11-10 3 views
0

Сообщество,Django: пользовательский вид внутри/статический/каталог

Я использую Django 1.7. Из-за специфики проекта у меня есть сложные потребности в обработке статических файлов. Другими словами, мне нужно, чтобы /static/ обслуживался при разработке, как обычно, но подкаталог /static/blueprints/ должен обслуживаться пользовательским представлением.

Кажется, что статический режим просмотра имеет приоритет выше всего в urls.py. Следующие только не работают:

urlpatterns = patterns('', 
    url(r'^static/blueprints/(?P<blueprint>[\w-]+)/(?P<path>.+)', 'my_view_name'), 
    ... 
) 

Этот вид никогда не срабатывает при доступе к соответствующему URL-адресу. Но изменение static/blueprints, скажем, my_static/blueprints делает этот путь работать, поэтому представление действительно работает.

Конечно, мне это нужно только при разработке; на производстве скрипт будет использоваться для формирования необходимой структуры каталогов, обслуживаемой Nginx. Таким образом, решения:

  1. Избегайте использования debug=True на devserver. Но отладчик Django очень полезен.
  2. Не используйте django.contrib.staticfiles. Не нравится, я бы хотел использовать команду collectstaic.
  3. Используйте только /blueprints/ путь вместо /static/blueprints/, который является решением, но просто против эстетики.

Есть ли более элегантное решение?

+0

'my_view_name'? или как вы предполагаете, что вид делает этот путь работать? https://github.com/django/django/blob/master/django/views/static.py#L21 – madzohan

+0

Ну, 'my_view_name' на самом деле' myapp.views.blueprint_view', который является моим собственным представлением. И на самом деле он использует вид, к которому вы привязаны, просто добавляет некоторую пользовательскую логику. – Altaisoft

+0

Итак, я не знаю, что на самом деле делает этот вид, но при использовании 'serve' вы должны предоставить параметр' 'document_root'' и где' '' в конце вашего шаблона? 'url (r '^ static/(? P . *) $', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),' – madzohan

ответ

1

Вы используете ./manage.py runserver на своем dev-сервере, не так ли? Тогда вы можете идти по этому пути: ./manage.py runserver --nostatic, и в urls.py:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
urlpatterns = patterns('', 
    url(r'^static/blueprints/(?P<blueprint>[\w-]+)/(?P<path>.+)', 'my_view_name'), 
    ... 
) 
if settings.DEBUG: 
    urlpatterns += staticfiles_urlpatterns() 
+0

Спасибо, это очень элегантно! – Altaisoft

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