当调试为FALSE时,DJANGO-404媒体



我遇到了django的问题,我不知道如何修复它。

我使用DJANGO 3.2.8和Python 3.7.12

我编写了一个应用程序,允许用户将一些文件上传到我的数据库中,当管理员登录时,他可以选择一个用户并点击ID,然后它会显示用户的ID。当我将DEBUG=True设置为True时,一切都很好,但当我将DEFUG=False设置为False时,我在尝试显示用户的标识时出现了404错误,我不知道如何修复,我尝试了很多东西,但都不起作用(我对CSS使用collectstatic,当DEBUG=FALSE时它就起作用了,我已经得到了所有的图片…(

我的ID保存在媒体文件夹中。

设置

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) 
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles') 
STATIC_URL = 'staticfiles/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = '/media/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)

型号

def path_and_rename(path, prefix):
def wrapper(instance, filename):
ext = filename.split('.')[-1]
project = "pid_%s" % (instance.name,)
# get filename
if instance.pk:
complaint_id = "cid_%s" % (uuid.uuid4().hex,)
filename = '{}.{}.{}.{}'.format(prefix, project, complaint_id, ext)
else:
# set filename as random string
random_id = "rid_%s" % (uuid.uuid4().hex,)
filename = '{}.{}.{}.{}'.format(prefix, project, random_id, ext)
# return the whole path to the file
return os.path.join(path, filename)
return wrapper

class Company(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
id_card = models.FileField(upload_to=path_and_rename("id_card/", 'id_card'), null=True)

模板

<div>
ID : <a href="{{ companys.id_card.url }}">click here</a>
</div>

谢谢!

我终于找到了解决方案。

我创建了一个子域名media.mywebsite.com

然后我更新我的设置.py

MEDIA_ROOT = "/home/USER/public_html/media.mywebsite.com/"
MEDIA_URL = "https://media.mywebsite.com/"

这是工作!也许不是最好的方法,但它是工作

感谢

最新更新