4

Django 1.4にアップグレードしたばかりで、開発サーバーでの静的ファイルとメディアファイルの新しい「改善された」サービスに深刻な問題があります。私は Django が大好きですが、いったいなぜ彼らが STATIC_URL、STATIC_ROOT、STATICFILES_DIR を使用してこれらのファイルの提供を 2 倍複雑にしたのかは、まったく理解できません。

私は単に、開発サーバー上で静的およびアップロードされたすべてのファイルを提供しようとしています。多くの実験の後、STATIC_URL ファイルが機能していますが、MEDIA_URL ファイルも同様に提供されることはありません。

設定:

DIRNAME = os.path.dirname(__file__)
MEDIA_ROOT = os.path.join(DIRNAME, 'media/')
MEDIA_URL = '/media/'
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ()

メディア プロセッサと静的コンテキスト プロセッサを追加しました。

TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
'django.core.context_processors.media',
'django.core.context_processors.static',
"django.core.context_processors.request",
'satchmo_store.shop.context_processors.settings',
'django.contrib.messages.context_processors.messages',

)

そして、私はURL confsに追加しました:

# serve static and uploaded files in DEV
urlpatterns += staticfiles_urlpatterns()
urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

ドキュメントに示されているように、2 つの conf 設定が追加されています。1 つ目は静的用、2 つ目はメディア用です。

私の構造、ウェブサイトはアプリであり、djangoprojectの指示に従ってその中に静的ディレクトリが配置されています:

<myproject>
  --media
  --settings
  --templates
  --website
      |->static

テンプレートでは、静的コンテンツを問題なく提供できます

{{STATIC_URL}}css/style.css

ただし、アップロードされた画像 (これは photologue を使用したもの) は提供されませんが、URL は正しいです。

/media/photologue/photos/cache/spawning-2_admin_thumbnail.jpg

そのディレクトリ構造は media/ の下に存在します

超、超混乱。以前は問題がなかったのに、今ではすべてがとてつもなく複雑に思えます。

4

3 に答える 3

2

I´m very new to Django and I´ve never had any problem with static content.

This is my configuration. I hope it can help

My folder structure

django-project
--mainapp
----settings.py
----wsgi.py
----[...]
--otherapp
--fixtures
--static
--templates
--manage.py
--requirements.txt

settings.py

import os, socket

DEBUG = True
TEMPLATE_DEBUG = DEBUG
MAIN_APP = os.path.abspath(os.path.dirname(__file__))
PROJECT_ROOT = os.path.abspath(os.path.join(MAIN_APP, ".."))
MY_LOCALHOST = "VirusVault.local" # this is the real name of my local machine :)

try: HOST_NAME = socket.gethostname()
except: HOST_NAME = "localhost"

[...]

if HOST_NAME == MY_LOCALHOST:
    STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static/')
    STATIC_URL = "/static/"
    MEDIA_ROOT = os.path.join(STATIC_ROOT, 'media/')
    MEDIA_URL = "/media/"
else:
    STATIC_ROOT = "/server/path/to/static/files"
    STATIC_URL = "http://server.com/static/"
    MEDIA_ROOT = "/server/path/to/static/files/media/"
    MEDIA_URL = 'http://server.com/static/media/'

You need to add 'django.contrib.staticfiles' to INSTALLED_APPS

urls.py

if settings.HOST_NAME == settings.MY_LOCALHOST:
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
    )
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
    )
于 2012-12-16T03:18:29.090 に答える
0

最初にコメントを書くつもりだったのですが、どういうわけかadd commentボタンが機能しません。

メディア ディレクトリの権限を確認しましたか?

回答になったので、完全に機能する Django 1.4 サイト構成の 1 つをダンプします。

構造:

-myproject
-- media
-- static
-- templates
-- myproject
--- settings.py
--- urls.py

settings.py:

PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__)) # Not the best way but works
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static/')
STATIC_URL = '/static/'

urls.py:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = patterns('',
...
(r'^media/(?P<path>.*)$', 'django.views.static.serve', 
   {'document_root': settings.MEDIA_ROOT}),
)
urlpatterns += staticfiles_urlpatterns()
于 2012-12-16T04:04:03.497 に答える
0

Django 1.4 フォルダー構造を使用している場合settings.py、新しいwebsiteアプリ フォルダーに移動したため、MEDIA_ROOT が正しくなくなりました。この場合、相対位置が機能するかどうかはわかりませんが、次のようにする必要があります

MEDIA_ROOT = os.path.join(DIRNAME, '../media/')

絶対パスを使用する方が簡単な場合があります。

于 2012-12-16T04:14:37.490 に答える