我正在使用Django 1.8,当我运行开发Django服务器时,我无法显示我的JavaScript和CSS。我认为主要问题是没有很好地理解将静态根和静态根目录设置为什么。我注意到,当我创建Django项目和应用程序时,我的文件夹/文件路径与其他路径的创建方式不同。我将STATIC_ROOT和STATICFILES_DIR分配给什么?
Settings.py:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_file_)))
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'Myapp'
)
ROOT_URLCONF = 'MyProject.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates' )],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static")
urls.py:
from django.conf.urls import include, url
from django.contrib import admin
from Myapp.views import startpage
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
# Examples:
# url(r'^$', 'MyProject.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', startpage)
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
views.py:
from django.shortcuts import render, render_to_response
# Create your views here.
def startpage(request):
return render_to_response('htmlpage.html');
这是我目前的目录:
C:\Users\Me\DjangoProjects\
|-----MyProject\
|------MyApp\
|----_init_.py
|----admin.py
|----models.py
|----tests.py
|----views.py
|----_pycache_\
|----migrations\
|------MyProject\
|----_init_.py
|----settings.py
|----urls.py
|----wsgi.py
|----_pycache_\
|------staticfiles\
|------templates\
|----htmlpage.html
|------db.sqlite3
|------manage.py
我也不知道在哪里放置我的JSON文件,因为我使用jquery / javascript从JSON文件中获取数据。另外,我的javascript代码嵌入在我的html文件中,是可以的还是我需要制作一个单独的javascript文件?
非常感谢任何帮助。谢谢。
制作更新。
答案 0 :(得分:0)
好的,按照问题的相反顺序回答你的问题。
首先,将html,javascript和css保存在单独的文件中总是更好的约定和做法。因此,所有HTML文件都放在模板目录中,javascript和CSS放在静态目录中的js和css目录中。
现在,我不认为每次加载网络应用程序时都需要访问某些json文件。如果是,那么为了那个目的,你的东西又错了,你有你的数据库。所以将数据移动到您的数据库。如果它是一次性的,比如数据上传,那么你可以将它保存在静态目录中的json目录中。
现在最后,关于STATIC_ROOT vs STATIC_DIRS vs STATIC_URL的主要问题,那么这里已经有了一个很好的解释 - > Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT
另外你需要将'staticfiles'目录重命名为'static',就像你在settings.py中提到STATIC_URL ='/ static /'而不是/'staticfiles'/或者你可以更改STATIC_URL = / 'staticfiles'/,但前者是遵循惯例,所以请坚持下去。
答案 1 :(得分:0)
这是您使用javascript从json文件读取数据的问题的解决方案,即它不依赖于django或php或类似的东西。
function getAllSupportedItems( ) {
return $.getJSON("staticfiles/json_folder/name_of_your_json_file.json").then(function (data) {
return data.items;
});
}
getAllSupportedItems().done(function (items) {
// you have your items here
});
请参阅此内容以获得更好的解释 - > Using Jquery to get JSON objects from local file
还有一件事,如果你克服了这个问题,你可能会陷入困境。
在您的settings.py中,您提到了STATIC_URL ='/ static /',而您已将该文件夹命名为'staticfiles'。因此要么将'staticfiles'重命名为'static',要么将其重命名为'static'。虽然前者是常规,所以将其重命名为'static',否则你的settings.py将在BASE目录中查找名为'static'的文件夹,但它永远不会找到一个名为'staticfiles'的文件夹