【问题标题】:Django file upload not displayingDjango文件上传不显示
【发布时间】:2017-12-08 08:28:12
【问题描述】:

我已经编写了文件上传代码,但它没有显示在我的目标页面上。 请帮助我编辑我的代码或建议如何解决此问题。 显示其余字段,但不显示文件字段

我的models.py

class Help(models.Model):
  researcher  = models.CharField(max_length=100)
  study = models.CharField(max_length=500)
  date = models.DateTimeField(auto_now_add=True)
  document = models.FileField(upload_to='documents/', null=True, blank=True)

forms.py

from django import forms
from .models import Help
from django.forms import ModelForm

class AboutHelp(forms.ModelForm):

    class Meta:
        model = Help
        fields = '__all__'

源页面

<form action="{% url 'lazer.views.about_experiment' exp.link_name %}" method="POST" name="form"> 
  {% csrf_token %}
      <label>Researcher Name(s):
        <input type="text" name="researcher"><br>
      <lable>Study Summary
        <textarea rows="10" cols="50" placeholder="Start typing..." maxlength="500" class="form-control" name="study"></textarea>
      <br>
      <label>Upload your IRB approval letter: 
        <input type ="file" id="irb-file" class="file_input" name="document"></label>
      <br>
      <input type = "submit" value="Submit" class="btn btn-primary" />
  </form>

views.py

def about_experiment(request, ex_link_name):
  researcher = None
  study = None
  posts = None
  exp = get_object_or_404(Experiment,link_name = ex_link_name)
  high_scores = ScoreItem.objects.filter(experiment=exp,active=True)
  context = {
    'request': request,
    'exp':exp,
    'high_scores': high_scores,
    'awards':AwardItem.objects.filter(experiment=exp,visible=True),
  }

  if exp.about_file:
    context['about_file'] = settings.EXPERIMENT_DIRS+exp.about_file.get_include_path()
    return render(request, 'about_experiment.html', context)

  if request.method == 'POST':
        form = AboutHelp(request.POST, request.FILES)
        posts = Help.objects.filter().order_by('-date')[0]
        if form.is_valid():
            obj = form.save(commit = False)
            obj.save()
            researcher = form.cleaned_data['researcher']
            study = form.cleaned_data['study']
            document = form.cleaned_data['document']

  else:
      form = AboutHelp()
      posts = Help.objects.filter().order_by('-date')[0]
      return render(request, 'about_experiment.html', {'posts': posts})  
  return render(request, 'about_experiment.html', {'posts': posts})

目标页面

  <h4><b>{{ posts.researcher }}</b></h4>
          <p>{{ posts.study }}</p>
          <p>Uploaded file is : {{ posts.document }}</p>

【问题讨论】:

    标签: django django-models django-forms django-templates django-views


    【解决方案1】:

    您是否检查过您的文件是否已保存?而且我认为您还没有理解 Django 表单的使用。这里是 how to。您正在创建表单,但您正在手动显示字段并且在视图中,您通过 forms.cleaned_data 获取数据。另外,要保存文件,您需要定义&lt;form enctype="multipart/form-data" &gt; 这是why

    【讨论】:

    • 问题是每当我刷新目标页面时,文件都会在我的路径中一次又一次地上传。如何排序?
    • 提交网页表单后,您可以使用返回 Django 的另一种称为 HttpResponseRedirect 的快捷方式呈现方法,即使您只是重定向到同一个视图。否则,某些浏览器最终会提交两次表单。但是您可以使用 URL 栏刷新以避免页面重新提交。
    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多