我正在使用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设置有什么遗漏吗?
我正在使用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) 我很困惑static root,想澄清一些事情.
为了服务于Django的静态文件,下面应该是settings.py和urls.py:
import os
PROJECT_DIR=os.path.dirname(__file__)
Run Code Online (Sandbox Code Playgroud)
STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')
Run Code Online (Sandbox Code Playgroud)
STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)
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问题:
任何人都可以向我解释工作流程:如何理想地完成工作.到目前为止,我将上面的代码片段复制/粘贴到他们指定的位置,并继续在静态目录中创建新文件,它可以工作.settings.STATIC_ROOT然而,在我看来,我指的是另一个目录.
如果有人能够解释每个设置的工作流程,那将是很好的:如何收集和管理文件,以及遵循什么样的好习惯.
谢谢.
我目前正在将项目中的所有静态文件引用迁移到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中,惯例是将您的应用程序特有的所有静态文件(即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 /目录相同)
这有什么意义?是不是只创建了我所有静态文件的副本?
我是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)
我怎样才能解决这个问题?否则我错过任何安装包?
这三个静态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.js到STATIC_ROOT/admin/custom.js,但它不工作.投掷404未找到错误.
然后我改变STATIC_ROOT对STATICFILES_DIRS,和它的作品!
....
STATICFILES_DIRS = "/home/user/project/django1/top/listing/static"
Run Code Online (Sandbox Code Playgroud)
所以,我不明白这里发生了什么.事实上,我只是不明白STATIC_ROOT和之间有什么区别STATICFILES_DIRS.
目前我正在通过virtualenv在我的机器上测试Django,还没有部署,这是STATIC_ROOT不工作的原因??
我正在开发一个由许多应用程序组成的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模板上引用了一个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刷新静态文件的选项吗?我以为重启服务器就足够了...我应该重启我的电脑吗?:/ 大声笑.
我在/ 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.简单干净.