标签: django-staticfiles

为什么DEBUG = False设置使我的django静态文件访问失败?

我正在使用Django作为我的主力来构建应用程序.到目前为止一直都很好 - 指定数据库设置,配置静态目录,网址,视图等.但是,当我想要渲染我自己的美丽和自定义404.html和500.html页面时,麻烦开始潜行.

我阅读了有关自定义错误处理的文档,并在UrlsConf中设置了必要的配置,创建了相应的视图,并将404.html和500.html添加到了我的应用程序的模板目录(也在settings.py中指定).

但是文档说you can actually view custom error views until Debug is Off,所以我确实把它关掉来测试我的东西,那就是什么东西变得狂暴!

我不仅无法查看自定义404.html(实际上,它加载,但因为我的错误页面每个都包含一个图形错误消息 - 一些不错的图像),错误页面的源加载,但没有其他任何加载!甚至没有链接CSS或Javascript!

通常,一旦我设置DEBUG = False,所有视图将加载,但任何链接的内容(CSS,Javascript,图像等)将不会加载!发生了什么?关于静态文件和DEBUG设置有什么遗漏吗?

django django-views django-staticfiles

321
推荐指数
12
解决办法
10万
查看次数

Django在视图中获取静态文件URL

我正在使用reportlab pdfgen来创建PDF.在PDF中有一个由...创建的图像drawImage.为此,我要么需要图像的URL,要么需要视图中图像的路径.我设法建立了URL但是如何获得图像的本地路径?

我如何获得URL:

prefix = 'https://' if request.is_secure() else 'http://'
image_url = prefix + request.get_host() + STATIC_URL + "images/logo_80.png"
Run Code Online (Sandbox Code Playgroud)

django django-views django-staticfiles

126
推荐指数
7
解决办法
6万
查看次数

django static static url static root

我很困惑static root,想澄清一些事情.

为了服务于Django的静态文件,下面应该是settings.pyurls.py:

import os
PROJECT_DIR=os.path.dirname(__file__)
Run Code Online (Sandbox Code Playgroud)

1.应该收集静态文件的目录的绝对路径

STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')
Run Code Online (Sandbox Code Playgroud)

2.静态文件的URL前缀

STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)

3.静态文件的其他位置

STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)
Run Code Online (Sandbox Code Playgroud)

......并在urls.py以下几行中:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
    r'^static/(?P<path>.*)$',
    'django.views.static.serve',
    {'document_root': settings.STATIC_ROOT}
))
Run Code Online (Sandbox Code Playgroud)

我们也用 python manage.py collectstatic

问题:

  1. 任何人都可以向我解释工作流程:如何理想地完成工作.到目前为止,我将上面的代码片段复制/粘贴到他们指定的位置,并继续在静态目录中创建新文件,它可以工作.settings.STATIC_ROOT然而,在我看来,我指的是另一个目录.

  2. 如果有人能够解释每个设置的工作流程,那将是很好的:如何收集和管理文件,以及遵循什么样的好习惯.

谢谢.

django django-urls django-staticfiles

110
推荐指数
3
解决办法
9万
查看次数

django 1.5 - 如何在静态标记内使用变量

我目前正在将项目中的所有静态文件引用迁移到django 1.5引入的新{%static%}标记,但是我遇到了问题,在某些地方我使用变量来获取内容.使用新标签我不能,有什么方法可以解决这个问题吗?

当前代码:

<img src="{{ STATIC_URL }}/assets/flags/{{ request.LANGUAGE_CODE }}.gif" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" />
Run Code Online (Sandbox Code Playgroud)

它应该是什么(这不起作用):

<img src="{% static 'assets/flags/{{ request.LANGUAGE_CODE }}.gif' %}" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" />
Run Code Online (Sandbox Code Playgroud)

django django-templates django-staticfiles

92
推荐指数
5
解决办法
4万
查看次数

Django的收藏有什么意义?

这可能是一个愚蠢的问题,但它并没有点击我的脑袋.

在Django中,惯例是将您的应用程序特有的所有静态文件(即css,js)放入名为static的文件夹中.所以结构看起来像这样:

mysite/
    manage.py
    mysite/ --> (settings.py, etc)
    myapp/ --> (models.py, views.py, etc)
        static/
Run Code Online (Sandbox Code Playgroud)

在mysite/settings.py我有:

STATIC_ROOT = 'staticfiles'
Run Code Online (Sandbox Code Playgroud)

所以当我运行命令时:

python manage.py collectstatic   
Run Code Online (Sandbox Code Playgroud)

它在根级别创建一个名为staticfiles的文件夹(与myapp /目录相同)

这有什么意义?是不是只创建了我所有静态文件的副本?

python django static-files django-staticfiles collectstatic

69
推荐指数
4
解决办法
3万
查看次数

无法执行collectstatic

我是django的新手!当我使用命令时,python manage.py collectstatic我收到此错误

django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path
Run Code Online (Sandbox Code Playgroud)

但我可以成功运行服务器.

我的静态文件声明是:

STATIC_ROOT = ''

STATIC_URL = '/static/'


STATICFILES_DIRS = (

    ('assets', os.path.join(PROJECT_DIR, '../static')),
)
Run Code Online (Sandbox Code Playgroud)

和debug设置为true

DEBUG = True
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?否则我错过任何安装包?

python django django-staticfiles

59
推荐指数
2
解决办法
5万
查看次数

STATICFILES_DIR,STATIC_ROOT和MEDIA_ROOT之间的差异

这三个静态URL有什么区别?

我不确定我是对的,我MEDIA_ROOT用来存储我上传的照片(通过models.ImageField())

但是,我为我的管理员创建了一个JS脚本admin.py.我将媒体定义如下:

....
class Media:
      js = ('/admin/custom.js', )
Run Code Online (Sandbox Code Playgroud)

和我的settings.py:

 ....
 STATIC_ROOT = "/home/user/project/django1/top/listing/static"
Run Code Online (Sandbox Code Playgroud)

我添加了custom.jsSTATIC_ROOT/admin/custom.js,但它不工作.投掷404未找到错误.

然后我改变STATIC_ROOTSTATICFILES_DIRS,和它的作品!

....
STATICFILES_DIRS = "/home/user/project/django1/top/listing/static"
Run Code Online (Sandbox Code Playgroud)

所以,我不明白这里发生了什么.事实上,我只是不明白STATIC_ROOT和之间有什么区别STATICFILES_DIRS.

目前我正在通过virtualenv在我的机器上测试Django,还没有部署,这是STATIC_ROOT不工作的原因??

python django django-static django-staticfiles

54
推荐指数
3
解决办法
3万
查看次数

在Django中管理多个应用程序的静态文件

我正在开发一个由许多应用程序组成的Django(1.3)项目.每个应用程序在其自己的static目录下都有自己的静态文件.此外,我添加了一个目录project_static,其中应包含静态文件,这些文件在各种应用程序中很常见,例如jQuery.

我立即遇到的问题是命名冲突.默认情况下,collectstatic只需将所有内容放在全局static目录下,而无需按应用程序对其进行分类.这对我不起作用,因为每个应用程序都有 - 例如 - 一个名为的文件css/screen.css.

我的方式解决它是通过消除django.contrib.staticfiles.finders.AppDirectoriesFinder来自STATICFILES_FINDERS和使用命名空间的静态文件显示目录,所以我的设置现在的样子:

STATICFILES_DIRS = (
    os.path.join(PROJECT_PATH, 'project_static'),
    ('my_app', os.path.join(PROJECT_PATH, 'my_app', 'static')),
    ('another_app', os.path.join(PROJECT_PATH, 'another_app', 'static')),
    ...
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
)
Run Code Online (Sandbox Code Playgroud)

问题是,通过这种方式,我丢失了所有其他应用程序的静态文件(例如django.contrib.admin).当然我可以手动添加管理员,但我不知道如何在不破坏管理员的情况下执行此操作,管理员具有不同的目录结构.

有没有更好的方法来管理具有多个应用程序的静态文件?

django django-staticfiles

44
推荐指数
1
解决办法
1万
查看次数

Django不会刷新静态文件

这很烦人.我在django模板上引用了一个javascript文件:

 <script src="{% static 'js/login.js' %} "></script>
Run Code Online (Sandbox Code Playgroud)

我对那个js文件做了一些更改.然后,我刷新页面,我看不到发生的变化.

如果我从文件中删除javascript并将其放入HTML中,它可以正常工作,但如果我尝试使用外部js文件,那么它不会.我试过关闭服务器并多次运行runserver,我也尝试过从Firefox更改为Chrome.这根本没有意义.请帮助我理解,我可以在HTML中包含所有js,但令我困扰的是,我不能以正常的方式做到这一点.

有关此错误的更多详细信息(我发现的#$&%#weirdest事件):

javascript是这样的:

old_sentence = "Dig that hole, forget the sun"  // this is what I want to change
$("#jqselector").text(old_sentence)

new_sentence = "Run, rabbit, run"  // this is the new sentence, it just won't show up.
Run Code Online (Sandbox Code Playgroud)

所以,我改变了js并重新启动服务器,html仍显示旧句子.然后我删除了对login.js文件的引用,并将所有js放在HTML中的脚本标记内,当然,出现了新的句子.然后我包含login.js文件,注释掉html里面的js但我删除了login.js文件中的所有内容,使其成为一个空文件......但是旧句子仍然显示出来.因此旧的login.js文件必须在我不知道的地方兑现.然后我打开Chrome并再次尝试,同样的问题.

它能是什么?有强制django刷新静态文件的选项吗?我以为重启服务器就足够了...我应该重启我的电脑吗?:/ 大声笑.

django django-staticfiles

42
推荐指数
6
解决办法
5万
查看次数

Django使用'/'url中的视图提供静态index.html

我在/ static /文件夹中有我的index.html.我尝试时,我的django应用程序正常运行:

http://127.0.0.1:8000/index.html
Run Code Online (Sandbox Code Playgroud)

但我想通过url访问index.html:

http://127.0.0.1:8000/
Run Code Online (Sandbox Code Playgroud)

我写了一个视图,它的工作原理:

class IndexView(TemplateView):
    template_name = 'index.html'
Run Code Online (Sandbox Code Playgroud)

我还添加到urls.py(这让我像静态一样http://127.0.0.1:8000/css/style.css):

url(r'^(?P<path>.*)$', 'django.contrib.staticfiles.views.serve', {
            'document_root': settings.STATIC_ROOT, 'show_indexes':True
        }),
Run Code Online (Sandbox Code Playgroud)

但我认为有一种方法可以在没有TemplateView的情况下做我想做的事情.

有什么建议?谢谢.我的django版本是:Django 1.5

编辑:

我将index.html放入静态的原因是:我想制作与Phonegap兼容的django应用程序,所以在正确编码后,我所要做的就是 - > 从静态文件夹中生成.zip并将其作为移动应用程序上传到Phonegap.简单干净.

django django-views django-staticfiles

41
推荐指数
2
解决办法
4万
查看次数