django管理面板图像字段生成错误的图像路径

django管理面板图像字段生成错误的图像路径,django,Django,我有一个上传到媒体/目录的图像字段。在django管理面板中,它链接到admin/api/character/2/change/media/image.jpg,而不是media/image.jpg。我如何纠正这个问题 编辑:html都是默认的django管理模板。事实上,这没有什么特别的。imagefield是直django。管理模板是直截了当的django。实现完全是直接的django。 settings.py看起来像这样 13导入操作系统 14 16 BASE_DIR=os.path.dir

我有一个上传到媒体/目录的图像字段。在django管理面板中,它链接到admin/api/character/2/change/media/image.jpg,而不是media/image.jpg。我如何纠正这个问题

编辑:html都是默认的django管理模板。事实上,这没有什么特别的。imagefield是直django。管理模板是直截了当的django。实现完全是直接的django。 settings.py看起来像这样

13导入操作系统
14
16 BASE_DIR=os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(u文件_u)))
17
23来自战利品追踪者。机密导入机密
24秘密密钥=秘密['SECRET\u KEY']
25
27调试=真
28
29允许的_主机=['*',]
33
34个已安装的应用程序=[
35“喷气式飞机仪表板”,
36“喷气式飞机”,
37“django.contrib.admin”,
38“django.contrib.auth”,
39“django.contrib.contenttypes”,
40“django.contrib.sessions”,
41“django.contrib.messages”,
42“django.contrib.staticfiles”,
43
44“django_扩展”,
45“django_过滤器”,
46“django_用户_代理”,
47“rest_框架”,
48“跟踪分析仪”,
49
50‘空气污染指数’,
51 ]
52
53中间件=[
54'django.middleware.security.SecurityMiddleware',
55'django.contrib.sessions.middleware',
56'django.middleware.common.CommonMiddleware',
57'django.middleware.csrf.CsrfViewMiddleware',
58'django.contrib.auth.middleware.AuthenticationMiddleware',
59'django.contrib.messages.middleware.MessageMiddleware',
60'django.middleware.clickjacking.xframeoptions中间件',
61 ]
62
63 ROOT_URLCONF='loot_tracker.url'
64
65个模板=[
66     {
67“BACKEND”:“django.template.backends.django.DjangoTemplates”,
68“目录”:[],
69“应用程序目录”:正确,
70“选项”:{
71“上下文处理器”:[
72'django.template.context_processors.debug',
73'django.template.context_processors.request',
74'django.contrib.auth.context_processors.auth',
75'django.contrib.messages.context_processors.messages',
76             ],
77         },
78     },
79 ]
80
81 WSGI_应用程序='loot_tracker.WSGI.APPLICATION'
82
87个数据库={
88“默认值”:{
89“引擎”:“django.db.backends.postgresql_psycopg2”,
90“姓名”:“博士后”,
91“用户”:“postgres”,
92“密码”:机密['db_pass'],
93“主机”:“数据库”,
94“端口”:“,
95     }
96 }
97
102身份验证密码验证程序=[
103     {
104“NAME”:“django.contrib.auth.password\u validation.UserAttributesMilarityValidator”,
105     },
106     {
107“NAME”:“django.contrib.auth.password\u validation.MinimumLengthValidator”,
108     },
109     {
110“NAME”:“django.contrib.auth.password\u validation.CommonPasswordValidator”,
111     },
112     {
113“NAME”:“django.contrib.auth.password\u validation.NumericPasswordValidator”,
114     },
115 ]
120
121语言代码='en us'
122
123时区='UTC'
124
125使用_I18N=True
126
127使用\u L10N=True
128
129使用_TZ=True
134
135静态URL='/STATIC/'
136 STATIC\u ROOT=os.path.join(基本目录'public')
137
138 REST_框架={
139“默认分页类”:“rest\u framework.PAGINATION.PageNumberPagination”,
140'页面大小:50
141 }
142
143 CORS\u ORIGIN\u ALLOW\u ALL=真
145
146 GEOIP_PATH=os.PATH.join(基本目录'GEOIP/')
147
148客户ID=机密[“客户ID”]
149客户机密=机密['CLIENT\u SECRET']
~                                                   
models.py,注意化身字段

8类字符(models.Model):
9 name=models.CharField(最大长度=20,唯一性=True)
10级=模型.整数字段(默认值=2)
11游戏类=模型。CharField(最大长度=20)
12 guild=models.ForeignKey('guild',blank=True,null=True,on_delete=models.PROTECT)
13 avatar=models.ImageField(上传到class='media/',默认为class='media/tyrone.jpg')
为了简洁起见,admin.py

9类字符admin(admin.ModelAdmin):
10个搜索字段=(“名称”、“游戏类”、“级别”)
11管理员站点注册(字符,字符管理员)
假设:

  • 您可以通过
    mysite.com/admin/
  • 您的服务器中有一个名为
    ../media/
    的目录,可以正确上载文件
  • ../media/
    中的这些文件通过URL
    mysite.com/media/
    正确提供(例如,如果您在浏览器中手动键入
    mysite.com/media/myfile.jpg
    ,您将在服务器中获得文件
    ../media/myfile.jpg
  • 您位于
    mysite.com/admin/api/character/2/change/
    中,在那里有一个文件字段,您可以上传文件(上传时可以在服务器上看到这些文件)
问题:

  • Django管理员上传后提供的文件的URL/链接是
    mysite.com/admin/api/character/2/change/media/image.jpg
    ,而不是
    mysite.com/media/image.jpg
解决方案:

  • 在Django应用程序的设置中,定义设置
    MEDIA\u URL
    ,以便Django知道从何处提供媒体文件。由于您尚未定义该设置,它默认为
    MEDIA\u URL=''
    ,因此实际上它只将文件路径附加到当前URL
旁注:

  • FileField
    中的
    upload\u to
    参数指的是您正在使用的存储器中的目录。在这种情况下,如果您正在将文件上载到服务器中名为
    /home/mysite/media/
    的文件夹中,并且设置了
    upload\u to='media/'
    ,则上载到该字段的所有文件都将上载到
    /home/mysite/media/

你能把你的代码写得更清楚一些吗?但我想你应该