【发布时间】:2016-07-09 03:37:21
【问题描述】:
我希望用户能够上传他们的自定义 html 模板,包括 css 样式以及 png 和 jpeg 图像。这些 html 文件应可通过 django 检索。这意味着他们可以以普通网页的形式查看生成的 html 内容。为了能够做到这一点,我(似乎还不知道更好的方法)必须在模板目录中上传 html 文件。
这是我目前的模型:
class StylesheetFile(models.Model):
HTML = 'HTML'
CSS = 'CSS'
JPEG = 'JPEG'
PNG = 'PNG'
# Currently supported mimetypes
MIMETYPE_CHOICES = (
(HTML, 'text/html' ),
(CSS , 'text/css' ),
(JPEG, 'image/jpeg'),
(PNG , 'image/png' ),
)
mimetype = models.CharField(max_length=64, choices = MIMETYPE_CHOICES)
company = models.ForeignKey(Company)
file = models.FileField(upload_to=get_upload_path)
这是当前确定upload_path的函数:
def get_upload_path(instance, filename):
if instance.mimetype == 'HTML':
return os.path.join(
settings.TEMPLATES[0]['DIRS'][1],
instance.company.name,
filename)
if instance.mimetype == 'CSS':
return os.path.join(
"custom_css",
instance.company.name,
filename)
if instance.mimetype == 'JPEG' or instance.mimetype == 'PNG':
return os.path.join(
"custom_img",
instance.company.name,
filename)
模板设置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
'/home/ubuntu/app/templates/',
'/home/ubuntu/app/custom_templates',
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
当我这样做时,css 样式、png 和 jpeg 文件会正确上传,但 html 文件不会。我收到以下错误:
The joined path (/home/ubuntu/app/custom_templates/FooCompany/factors.html) is located outside of the base path component (/home/ubuntu/app/static/media)
我可以做些什么来防止这个错误?是否有一些最佳实践方法来解决我的问题,或者我是否必须采取一些解决方法,例如将我的 TEMPLATE_DIRS 之一设置为/home/ubuntu/app/static/media/custom_templates。也许这甚至不是一种解决方法和合法做法..我不知道真的知道..非常感谢帮助!
【问题讨论】: