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_street
和 flat 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 的特定目录
文件上传 AngularJS 和 Django:/uploaded_file uploadFile() 处的 TypeError 缺少 1 个必需的位置参数:“请求”