如何让用户在CharField中引用他们上传的文件?

时间:2013-06-09 23:46:11

标签: python django

我在django中创建了一个网站,它主要利用一些简单的应用程序让一小组用户添加事件,管理显示上传文件的页面等。最复杂的部分是每个用户都有一个包含内容的主页他们可以通过MarkupField管理自己(我正在使用https://github.com/jamesturk/django-markupfield中的那个),还有一系列子页面,他们也控制着它们。

我的问题是如何让他们上传图片和文件,并轻松地在他们的页面上引用这些图像和文件,以便包含图像或创建文件的链接。上传很好,如果您知道ImageField放置它们的位置,则可以静态引用图像/文件,但理想情况下,用户不必知道django实际存储文件的位置或静态服务的位置。 。到目前为止,我最好的想法是:

  1. 使用UserPage作为ForeignKey
  2. 创建文件/图像上传模型
  3. 让用户为每个页面上传尽可能多的图片或文件
  4. 修改MarkupField以首先解析文本并使用正确的静态URL替换一些新语法(例如'&& IMAGE_1'以引用与页面关联的第一个上载图像),其中引用的图像字段实际存储的位置它。
  5. 这样做的缺点是我正在发明我自己的一小段语法,并且必须可靠地解析它。这不应该太困难,但有没有现成的方法来完成同样的事情,或者另一种值得考虑的方法?我不确定我是否可能在django框架中至少以一种更自然的方式去做它。

1 个答案:

答案 0 :(得分:1)

听起来你的起步很好。

听起来你可能没有注意到的一些事情:

  • FileField及其子类ImageField具有.url属性。
  • 如果你想保留你的MarkupField香草,可以override the model's save()方法添加额外的语法。

我的解决方案是让您的模板返回一个设置了javascript的图像列表,以便向用户显示他的图像列表,并且可以单击一个将其添加到她正在编写的内容中。我喜欢使用jquery来做这种事情,但你也可以用纯粹的javascript来做。您的列表可能会在他们单击“添加图像”按钮时显示,在他们开始键入图像添加语法时自动显示,或者两者都显示。我也会自动生成缩略图并将.thumbUrl添加到模型中,以便用户可以从缩略图中选择图像。

所以这个想法是这样的:

function addImgMarkup(imgUrl){
    $('#idOfMarkupTextFormField').val($('#idOfMarkupTextFormField').val()
+ 'imageSyntax' + imgUrl); }

在jquery document.ready函数和

{% for uplImg in UserPage.uploaded_image__set.all %}
<a href="#" onclick="addImgMarkup({{uplImg.url}})">
    <img src="{{uplImg.thumbUrl}}" alt="{{uplImg.name}}"></img>
</a>
{% endfor %}

在html中。

请询问您是否要澄清其中任何一项。