- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有两种形式:一种是创建新对象(然后为其创建一个新的空文件),另一种是使用现有文件创建对象(上传文件)。创建表单工作得很好,它采用新创建的对象的名称并创建一个同名的文件并将其上传到静态文件夹中。然而,第二种形式,它告诉您它获得了文件对象和所有内容,但在任何地方都找不到该文件。
我尝试更改目录并修改代码和所有内容,但它似乎根本不起作用,我不知道问题出在哪里,这是我的代码:
views.py:
def create(request):
print request.POST
filename = request.POST['name']
f = File(open(filename, "w+"))
structure = Structure(name=request.POST['name'], file=f)
structure.save()
return redirect('/structures')
def upload(request):
print request.POST
structure = Structure(name=request.POST['name'], file=request.POST['file'])
structure.save()
return redirect('/structures')
模型.py:
class Structure(models.Model):
name = models.CharField(max_length=120)
file = models.FileField(upload_to='structures')
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
def __str__(self):
return self.name
html 模板:
[...]
<!--CREATE-->
<div class="col-md-12">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Créer une nouvelle structure</h3>
</div>
<div class="panel-body">
<form class="form-horizontal" action="/create", method="post">
{% csrf_token %}
<fieldset>
<div class="form-group">
<label for="name" class="col-lg-6 control-label">Nom de la structure</label>
<div class="col-lg-6">
<input type="text" name="name" id="name">
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2" align="center">
<button type="submit" value="Create" class="btn btn-primary">Créer</button>
</div>
</div>
</fieldset>
</form>
</div>
</div>
</div>
<!--END-CREATE-->
<!--UPLOAD-->
<div class="col-md-12">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Mettre en ligne une nouvelle structure</h3>
</div>
<div class="panel-body">
<form class="form-horizontal" action="/upload", method="post">
{% csrf_token %}
<fieldset>
<div class="form-group">
<label for="name" class="col-lg-6 control-label">Structure</label>
<div class="col-lg-6">
<input type="text" name="name" id="name">
<label for="structures"></label>
</div>
</div>
<div class="form-group">
<label for="file" class="col-lg-6 control-label">Fichier de la structure</label>
<div class="col-lg-6">
<input type="file" name="file" id="file">
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2" align="center">
<button type="submit" value="Create" class="btn btn-primary">Créer</button>
</div>
</div>
</fieldset>
</form>
</div>
</div>
</div>
<!--END-UPLOAD-->
[...]
url.py:
url(r'^create$', views.create),
url(r'^upload$', views.upload),
设置.py:
STATIC_URL = '/static/'
MEDIA_ROOT = 'files/'
这是上传文件时的服务器日志:
我很感谢大家的帮助。
<QueryDict: {u'csrfmiddlewaretoken': [u'D8Cz7fUkxbpl2hYb3lmjnzm85jzlMjti'], u'name': [u'doctor list'], u'file': [u'doctors1.ods']}>
[01/Nov/2017 10:10:13]"POST /upload HTTP/1.1" 302 0
[01/Nov/2017 10:10:13]"GET /structures HTTP/1.1" 301 0
[01/Nov/2017 10:10:13]"GET /structures/ HTTP/1.1" 200 8195
顺便说一句:在html模板中,我显示每个对象的文件路径,当我创建对象并因此创建新文件时,路径显示如下 structurals/file.ext
但当我上传它时,它只显示如下: files.ext
最佳答案
嗯,有几件事你应该改变:
1- 使用表单处理上传:
在您的forms.py
中:
class FileUpload(forms.ModelForm):
class Meta:
model = Structure
fields = ('file', 'name')
在你的views.py
中:
form = FileUpload(request.POST, request.FILES)
if form.is_valid():
form.save()
# you can also do some other stuff before saving the form.
2- 将 enctype
添加到您的表单:
更改此:
<form class="form-horizontal" action="/upload", method="post">
至:
<form class="form-horizontal" action="/upload", method="post" enctype="multipart/form-data">
这应该可以解决您的问题。
最后一部分:您正在使用表单上传文件。因此,如果您的文件名已存在于上传文件夹中,表单将在文件末尾添加一些随机单词和数字。所以你不能像这样显示文件路径,它可能是错误的。您可以创建上传文件的实例并获取名称或路径。
它会是这样的:
file = form.save()
# You can get the file url like this:
print(file.file.url)
# Or file path:
print(file.file.path)
关于python - Django:文件上传与文件创建(上传不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47052385/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!