2

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

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

  1. 使用 UserPage 作为 ForeignKey 创建文件/图像上传模型
  2. 让用户为每个页面上传任意数量的图像或文件
  3. 修改 MarkupField 以首先解析文本并用正确的静态 url 替换一些新语法(例如,像 '&&IMAGE_1' 来引用与页面关联的第一个上传图像),以用于引用的图像字段实际存储它的位置。

这样做的缺点是我正在发明自己的一小段语法并且必须可靠地解析它。这应该不会太难,但是是否有现有的方法来完成同样的事情,或者值得考虑的替代方法?我不确定我是否会在 django 框架内错过至少一种更自然的方法。

4

1 回答 1

1

听起来你有一个好的开始。

听起来你可能不知道的一些事情:

  • FileField 及其子类 ImageField 具有.url属性。
  • 如果你想保留你的 MarkupField vanilla,你可以覆盖模型的 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 中。

请询问您是否需要对此进行澄清。

于 2013-06-10T01:07:16.643 回答