19

通常の MEDIA ファイルのメディア ファイルは正常に提供されていますが、管理者のメディア ファイルを提供しようとすると失敗しました。数時間問題のトラブルシューティングを試みましたが、運が悪かったので、問題を特定するのを手伝ってください(グーグルも行って、静的ファイルの提供に関するdjangoドキュメントも読んでください)。

localhost:8000/media/a.gif にアクセスしようとしたときのエラーは次のとおりです。

ページが見つかりません: f:\python25\lib\site-packages\django/contrib/admin/media\a.gif

管理メディア ファイルは「media」という名前のディレクトリに置き、通常のメディア ファイルは「static」という名前のディレクトリに置きます。私もWindowsです。

urls.py で通常のメディア ファイルを提供する方法は次のとおりです。

# serve static files
from django.conf import settings
if settings.ENVIRONMENT==settings.ENV_DEVELOPMENT:
    urlpatterns += patterns("django.views",
        url(r"%s(?P<path>.*)$" % settings.MEDIA_URL[1:], "static.serve", {"document_root": settings.MEDIA_ROOT,})
    )

そして私のsettings.py(重要な部分のみ):

import project_path
MEDIA_ROOT = project_path.MEDIA.replace('\\','/')
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'
TEMPLATE_DIRS = (
    project_path.TEMPLATE.replace('\\','/'),
)

そして私のproject_path.py:

import sys
from os.path import dirname, join
ROOT = dirname(__file__)
APP = join(ROOT, "apps")
TEMPLATE = join(ROOT, "templates")
MEDIA = join(ROOT, "static")
ADMIN_MEDIA = join(ROOT, "media")

ヒントはありますか?

または、少なくとも管理メディアファイルをどのように提供するかを共有してください(Webサーバーからファイルを変更せずに、djangoソースコードのみを介して)

前もって感謝します :)

4

7 に答える 7

32

あなたの答えはADMIN_MEDIA_PREFIX、ドメインを明示的に設定しない限り、runserver コマンドは contrib.admin から管理メディア ファイルを提供するということです。

私もこの魔法の振る舞いで火傷しました。これにはチケット (チケット #8336 ) がありましたが、利便性と混乱をそのままにしておくという設計上の決定がありました。

したがって、ディレクトリから管理メディア (grappelli または使用したい管理スキンを使用するため) を提供するには、次のrunserverようなコマンドを使用する必要があります。

MEDIA_ROOT =  os.path.join(PROJECT_ROOT, 'media/')
ADMIN_MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'admin-media/')
MEDIA_URL = '/site-media/'
ADMIN_MEDIA_PREFIX = 'http:/localhost:8000/admin-media/'

ここで正しい質問を復活させたいと思います。あらかじめお詫び申し上げます。

于 2009-11-01T10:28:37.227 に答える
3

少し異なる方法で開発サーバーを実行することをお勧めします [1] python manage.py runserver mydomain.com:8000 --adminmedia=/path/to/your/admin/media/

[1] http://code.google.com/p/django-grappelli/wiki/Installation

于 2010-01-24T13:14:39.657 に答える
2

テストサイトで同様のバグを修正しました。ADMIN_MEDIA_PREFIX と MEDIA_URL は決して同じであってはなりません。ドキュメントの次の注記を参照してください。

必ず末尾のスラッシュを使用し、これを MEDIA_URL 設定とは異なるものにしてください (同じ URL を 2 つの異なるファイル セットにマップすることはできないため)。

于 2009-08-05T05:00:58.483 に答える
2

試す

(r'^admin_media/(.*)', 'django.views.static.serve', {'document_root' : 'django/contrib/admin/media/', 'show_indexes' : True}),

あなたの urls.py ファイルで。そしてあなたを変える

ADMIN_MEDIA_PREFIX = '/admin_media/'
于 2009-07-04T07:40:30.590 に答える
1

staticfiles がトランクに含まれるようになってから (1.3 頃だと思います)、ADMIN_MEDIA_PREFIX マジックは使用されなくなりました。

現在、runserver は STATIC_URL + 'admin/' を想定しています。それは密かに静かにあなたのリクエストを傍受し、すべての urlconf を無視して、あなたを怒らせようとします。

于 2011-11-02T00:39:17.343 に答える
1

変更してみてください:

ADMIN_MEDIA_PREFIX = '/static/media/'

これは、 MEDIA_ROOT/media/ ディレクトリに admin メディア フォルダーが含まれていることを前提としています (これは、質問から理解したものです)。

于 2009-07-04T07:04:56.073 に答える
0

STATICFILES_DIRS を打撃として使用してみてください

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    ("images", os.path.join(STATIC_ROOT,'images').replace('\\','/')),
    ("css",    os.path.join(STATIC_ROOT,'css').replace('\\','/')),
    ("js",     os.path.join(STATIC_ROOT,'js').replace('\\','/')),
)

頑張ってください!

于 2011-11-10T08:13:13.457 に答える