我知道之前有人问过这个问题,但我很难在Django web应用程序上设置JS,即使我正在阅读文档。
我在运行Django dev服务器。我的文件结构如下:
mysite/
__init__.py
MySiteDB
manage.py
settings.py
urls.py
myapp/
__init__.py
admin.py
models.py
test.py
views.py
templates/
index.html
我想把Javascript和CSS放在哪里?我在很多地方都试过,包括myapp/
、templates/
和mysite/
,但似乎都没用。
从index.html:
<head>
<title>Degree Planner</title>
<script type="text/javascript" src="/scripts/JQuery.js"></script>
<script type="text/javascript" src="/media/scripts/sprintf.js"></script>
<script type="text/javascript" src="/media/scripts/clientside.js"></script>
</head>
来自url.py:
(r'^admin/', include(admin.site.urls)),
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': 'media'})
(r'^.*', 'mysite.myapp.views.index'),
我怀疑serve()
行是错误的原因,例如:
TypeError at /admin/auth/
'tuple' object is not callable
为了弥补猖獗的连枷,我在settings.py中更改了这些设置:
MEDIA_ROOT = '/media/'
MEDIA_URL = 'http://127.0.0.1:8000/media'
更新:我做了一些更改,但仍不起作用:
设置.py:
ROOT_PATH = os.path.normpath(os.path.dirname(__file__))
url.py:
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': os.path.join(settings.ROOT_PATH, 'site_media')}),
index.html:
<script type="text/javascript" src="/media/JQuery.js"></script>
<script type="text/javascript" src="/media/sprintf.js"></script>
<script type="text/javascript" src="/media/clientside.js"></script>
文件系统:
mysite/
site_media/
JQuery.js
sprintf.js
clientside.js
__init__.py
settings.py
manage.py
-- etc
myapp/
-- app files, etc
当我转到像http://127.0.0.1:8000/media/sprintf.js
这样的url时,我得到:
Page not found: /media/sprintf.js
如果要使用开发服务器提供静态文件,则可能需要对url.py中的“document_root”使用绝对路径。MEDIA_根和MEDIA_URL在此不起任何作用。
这是我的设置供你参考。我将所有静态媒体文件放在site_media/
在settings.py中:
在url.py中:
您可以将静态文件移动到其他位置,只需将“document_root”指向正确的路径即可。请确保为生产部署注释掉此url行。
但是这个
/media/
全局目录存在吗?你在那里放了一个scripts
子目录,里面有你想在那里提供的脚本吗?你想从中服务的/scripts/...
url怎么办JQuery.js
——它似乎在你的urls.py
之外的任何地方都没有服务。如果您(无论出于什么原因)希望从几个不同的URL路径为脚本(或任何其他静态服务的文件)提供服务,那么所有这些URL路径都需要在urls.py
中与静态服务匹配——或者,执行常规操作并从/media/...
根URL为它们提供服务,并将该媒体根目录映射到实际保存这些文件的目录(通常在它们各自的子目录中)。Django's docs关于静态服务(仅用于开发的,因为它被记录为
所以小心点!-)我觉得很清楚。
实际上,您可以将Javascript文件(以及所有静态内容)放在任何需要的地方。我的意思是,Django并没有对放置它们的位置强加一个标准,毕竟Django不会处理它们,它们将由web服务器提供服务。
这么说吧,最好把它们放在靠近项目文件的地方。我建议将它们保存在Django代码的兄弟文件夹中。与媒体根目录相同。
将静态文件与python文件分离是一个好主意,因为现在您可以将它们放在生产环境中完全独立的文件夹中,并轻松地为静态文件和python代码提供不同的访问权限(比如FTP访问或权限)。
需要记住的是,设置的MEDIA_ROOT是用户的媒体文件(即上传的内容)将被放置的位置,这些不是您的静态项目文件,而是您的Django应用程序上传的任何文件(化身、附件等)。
建议的文件夹结构:
请参阅关于在开发环境中使用Django的
serve()
函数的其他响应建议。只要确保在settings.DEBUG is True
条件下将url()
添加到urlpatterns
中。至于模板,最好使用context processor将静态文件的路径发送到所有模板。
相关问题 更多 >
编程相关推荐