Django 1.8 为特定位置上传文件

Posted

技术标签:

【中文标题】Django 1.8 为特定位置上传文件【英文标题】:Django 1.8 uploading files for a specific location 【发布时间】:2015-10-12 16:26:35 【问题描述】:

花了一整天的时间寻找,希望有人能给我答案。

有人可以请教如何让Django在根据打开的页面上传文件时创建文件目录。

例如,我需要为公寓创建网页,每个公寓都可以上传文件。

我知道如何上传到特定位置,但是 Django 有没有办法读取打开的页面并使用该页面的名称创建一个目录,比如说:

www.comunity.com/main street/house5/flat 1

我想用

创建目录
main_street/house5/flat1

以及要存储在那里的图像。

希望这是有道理的。

目前是models.py

# -*- coding: utf-8 -*-
from django.db import models

class Document(models.Model):
    docfile = models.FileField(upload_to='documents/%Y/%m/%d')

还有forms.py

class DocumentForm(forms.Form):
    docfile = forms.FileField(
    label='Pasirinkite dokumenta'
)

Views.py

from newsletter.models import Document
from newsletter.forms import DocumentForm

def Main_street_6_flat_1(request):

        # Handle file upload
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            newdoc = Document(docfile = request.FILES['docfile'])
            newdoc.save()

        # Redirect to the document list after POST
            return HttpResponseRedirect(reverse('Main_street_6_flat_1'))

        if request.method != 'POST':
            raise Http404

        docId = request.POST.get('docfile', None)
        docToDel = get_object_or_404(Document, pk = docId)
        docToDel.docfile.delete()
        docToDel.delete()

    else:
        form = DocumentForm() # A empty, unbound form

# Load documents for the list page
   documents = Document.objects.all()

# Render list page with the documents and the form
    return render_to_response(
       'Main_street_6_flat_1.html',
        'documents': documents, 'form': form,
             context_instance=RequestContext(request)
    )

【问题讨论】:

此时这是一个无关紧要的细节,但您的示例对空格字符使用了不一致的替换。 main street 变为 main_streetflat 1 变为 flat1 您能否也显示将文件保存到您所指的“特定位置”的代码?如果您这样做,我可以自定义答案以适合您的代码。 请看更新 这个问题的答案可能会有所帮助:***.com/questions/5135556/dynamic-file-path-in-django 谢谢你的链接,我看了几次,但无法让它工作,看起来它使用的是 id 而不是模板 url,我想使用它。 【参考方案1】:

您可以使用request.get_full_path() 获取请求页面的路径。

另一个例子见this related question,read the official docs here。

【讨论】:

您好,非常感谢您的回复,不知道如何解释:curewnt 设置在 models.py 类 Document(models.Model): docfile = models.FileField(upload_to='documents /%Y/%m/%d') 但我希望它为这个特定模板保存到文档/main_street/houseį/flat1,显然对于其他 20 个单位,我需要将文件保存在他们自己的目录中根据当时打开的页面。希望是有道理的。再次感谢

以上是关于Django 1.8 为特定位置上传文件的主要内容,如果未能解决你的问题,请参考以下文章

Django 将文件上传到取决于 POST URI 的特定目录

Django ImageField 保存到位置

Django - 为用户上传的媒体文件提供服务

Django 表单验证、clean() 和文件上传

在 django 1.8 中部署期间提供媒体文件

文件上传 AngularJS 和 Django:/uploaded_file uploadFile() 处的 TypeError 缺少 1 个必需的位置参数:“请求”