7

Django admin では、FileField がある場所にはいつでも、編集ページに現在のファイルへのハイパーリンクを含む「現在」ボックスがあります。ただし、このリンクは現在のページの URL に追加されるため、次のようなページがないため 404 になります http://127.0.0.1:8000/admin/Tank/asset/17/media/datasheet/13/09/05/copyright.html/
。参考までに、ファイルの正しい URL は次のとおりです。 http://127.0.0.1:8000/media/datasheet/13/09/05/copyright.html

デフォルトの管理レイアウトでこの問題を解決する方法はありますか? データベース内のすべての FileField に影響し、バグのように思えます。私の使い方が悪いだけでしょうか?

4

2 に答える 2

9

設定.py

次の行を追加します。

import os
BASE_DIR = os.path.realpath(os.path.dirname(__file__))

次の行を置き換えます。

MEDIA_ROOT = ''
MEDIA_URL = ''

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,os.pardir,'media')

これにより、フォルダー /your project directory/media/ からメディア コンテンツをレンダリングするようにプロジェクトが設定されます。

urls.py

次の行も追加します。

import settings

URL パターンに次の行を追加します。

url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': False}),

models.py

モデル内に次の行を追加します。

File = models.FileField('File',upload_to='./')

モデルでメソッドを定義する

def fileLink(self):
    if self.File:
        return '<a href="' + str(self.File.url) + '">' + 'NameOfFileGoesHere' + '</a>'
    else:
        return '<a href="''"></a>'
fileLink.allow_tags = True
fileLink.short_description = "File Link"

admin.py

fileLinkフィールドを読み取り専用フィールドとして使用します。list_display

例えば

class FileAdmin(admin.ModelAdmin):
    list_display = ['fileLink']
    readonly_fields = ['fileLink']
于 2013-12-09T15:15:38.553 に答える
0

この質問への回答は、この回答でかなり完全にカバーされています。簡単に言えば、問題は、メディア フォルダーが提供されるように、おそらく settings.py で MEDIA_ROOT と MEDIA を設定しておらず、urls.py で作成していないことです。

これらのことを行う方法の詳細については、Akseli Palenによる信じられないほど素晴らしい回答を確認してください。

于 2013-12-08T07:42:34.160 に答える