Django:/ static /目录中的自定义视图

时间:2014-11-10 07:06:05

标签: python django nginx django-staticfiles

社区,

我正在使用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. 避免在devserver上使用debug=True。但是Django的调试器非常有用。
  2. 避免使用django.contrib.staticfiles。不太讨人喜欢,我想使用collectstaic命令。
  3. 仅使用/blueprints/路径代替/static/blueprints/,这是一种解决方案,但仅仅是针对美学。
  4. 还有更优雅的解决方案吗?

1 个答案:

答案 0 :(得分:1)

您在开发服务器上使用./manage.py runserver,对吗?然后你就可以这样:./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()