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のドキュメントを読み、いくつかの代替設定を試しましたが、問題を解決するのに役立つものはありませんでした. ヒントをいただければ幸いです。

url.spy

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 の Staticfiles は、始めたばかりの人を常に混乱させるようです。また、ドキュメンテーションは改善される可能性があります。

何が何であるかの簡単な内訳は次のとおりです。

MEDIA_ROOT : フォームまたはモデル フォームの一部としてアップロードしたファイルが保存されるベース ディレクトリ。upload_toFile/ImageFieldのプロパティがこのパスに追加されます。

MEDIA_URL : MEDIA_ROOT にあるファイルにアクセスするための URL パターン。

STATIC_ROOT :本番環境で提供される静的ファイルを保持するディレクトリ。

STATIC_URL : STATIC_ROOT にあるファイルにアクセスできる URL パターン。

STATICFILES_DIRS : developmentで提供される静的ファイルを保持するディレクトリ。

に staticfiles アプリがある場合、にINSTALLED_APPSある静的ファイルのみを提供します。STATICFILES_DIRSDEBUG = True

を実行する$ python manage.py collectstaticと、アプリケーションの静的ディレクトリとサードパーティ アプリケーションが収集され、それらが にコピーされ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」を指すように変更STATIC_ROOTし、ディレクトリやファイルを自分で配置しないでください。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 に答える