0

我是 Django 的新手,对此我感到非常困惑。

以下是 settings.py 中的相关部分:

import os
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

STATIC_URL = 'http://http://127.0.0.1:8000/static/'

STATICFILES_DIRS = (
    PROJECT_ROOT+'/static/')

TEMPLATE_DIRS = (
    PROJECT_ROOT + '/templates/')

我的项目文件结构是这样的:

MyProj
    manage.py
    MyProj
      settings.py
      urls.py  
      templates
         base.html
      static
         css
         js

在 base.html 中以:

{% load staticfiles %}
{% load i18n %}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Bootstrap, from Twitter</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">
    <!-- Le styles -->
    <link rel="shortcut icon" href="http://twitter.github.com/bootstrap/assets/ico/favicon.ico">
    <link href="{{ STATIC_URL }}css/bootstrap.min.css" rel="stylesheet">
    <style type="text/css">
      body {
        padding-top: 60px;
        padding-bottom: 40px;
      }
    </style>
    <link href="{{ STATIC_URL }}css/bootstrap-responsive.min.css" rel="stylesheet">
  </head>

  <body>

但是 django 没有得到任何静态文件:

[15/Oct/2013 05:36:06] "GET /accounts/login/ HTTP/1.1" 200 3402
[15/Oct/2013 05:36:06] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 2089
[15/Oct/2013 05:36:06] "GET /static/css/bootstrap-responsive.min.css HTTP/1.1" 404 2122
[15/Oct/2013 05:36:06] "GET /static/js/jquery.min.js HTTP/1.1" 404 2074
[15/Oct/2013 05:36:06] "GET /static/js/prettify.js HTTP/1.1" 404 2068
[15/Oct/2013 05:36:06] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 2083
[15/Oct/2013 05:36:06] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 2089
[15/Oct/2013 05:36:06] "GET /accounts/login/ HTTP/1.1" 200 3402
[15/Oct/2013 05:36:06] "GET /static/css/bootstrap-responsive.min.css HTTP/1.1" 404 2122
[15/Oct/2013 05:36:19] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 2089
[15/Oct/2013 05:36:20] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 2089

我阅读了 Django文档并尝试了几种替代设置,但没有一个有助于解决问题。所以感谢你的提示。

网址间谍

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    #url(r'^$', 'myproj.views.home', name='home'),
    # url(r'^myproj/', include('myproj.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
   url (r'^accounts/', include('registration.backends.default.urls')),
)
4

1 回答 1

1

Django 中的静态文件似乎总是让刚开始的人感到困惑,而且 imo,文档可以改进。

以下是内容的快速细分:

MEDIA_ROOT:作为表单或模型表单的一部分上传的文件所在的基本目录。File/ImageField的upload_to属性附加到此路径。

MEDIA_URL:位于 MEDIA_ROOT 中的文件可通过其访问的 URL 模式。

STATIC_ROOT:存放要在生产中提供的静态文件的目录。

STATIC_URL:位于 STATIC_ROOT 中的文件可通过其访问的 URL 模式。

STATICFILES_DIRS:保存要在开发中提供的静态文件的目录(y/ies) 。

当您INSTALLED_APPSSTATICFILES_DIRS.DEBUG = True

当您运行时$ python manage.py collectstatic,它将为您的应用程序和任何 3rd 方应用程序收集所有静态目录并将它们复制到STATIC_ROOT.

因此,要修复生产中静态文件的路径,请确保您的设置正确,并且collectstatic在部署之前或作为部署过程的一部分运行。

静态文件还有一个新的模板标签:

{% load i18n %}
{% load static from staticfiles %}
<!DOCTYPE html>
<html lang="en">
  <head>
      ...
      <link href="{% static 'css/bootstrap.min.css' %}"
          rel="stylesheet">
      <link href="{% static 'css/bootstrap-responsive.min.css' %}"
          rel="stylesheet">
  </head>
  <body>
      ...

在您的项目结构中,将“/static”重命名为“/static-assets”并将该目录设置为STATICFILES_DIRS.

将您的指向更改STATIC_ROOT为“/static”,并且不要自己将任何目录或文件放在那里。让collectstatic管理命令这样做。

以下是我通常如何构建项目:

/my_app/
    /my_app/
        __init__.py
        settings.py
        urls.py

    manage.py

    /another_app_module/
        __init__.py
        models.py
        ...
    /static/
    /static-assets/
        /css
        /js
        /images
    /templates

鉴于此文件结构,并假设我的项目位于:/home/btaylor/django-projects/my_app/我的设置将是:

STATIC_ROOT = '/home/btaylor/django-projects/my_app/static'
STATIC_URL = '/static/'
MEDIA_ROOT = '/home/btaylor/django-projects/my_app/static/uploads'
MEDIA_URL = '/static/uploads/'
STATICFILES_DIRS = ('/home/btaylor/django_projects/my_app/static-assets',)
于 2013-10-15T12:12:30.963 回答