Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django文件现在显示在模板中_Django_Django Models_Django Forms_Django Templates_Django Views - Fatal编程技术网

Django文件现在显示在模板中

Django文件现在显示在模板中,django,django-models,django-forms,django-templates,django-views,Django,Django Models,Django Forms,Django Templates,Django Views,我的文件正在以正确的路径上载,但我有一个问题: 每当我刷新HTML页面时,文件就会一次又一次地上传。我如何解决这个问题?阿尔索 请帮助我的代码或建议我 提前感谢:) 我的观点 def about_experiment(request, ex_link_name): researcher = None study = None posts = None exp = get_object_or_404(Experiment,link_name = ex_link_name)

我的文件正在以正确的路径上载,但我有一个问题:

  • 每当我刷新HTML页面时,文件就会一次又一次地上传。我如何解决这个问题?阿尔索 请帮助我的代码或建议我
提前感谢:)

我的观点

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]
        documents = Help.objects.all()
        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]  
      documents = Help.objects.all()
      return render(request, 'about_experiment.html', {'posts': posts})

  return render(request, 'about_experiment.html', {'posts': posts})
源页面

<form action="{% url 'lazer.views.about_experiment' exp.link_name %}" method="POST" name="form" enctype="multipart/form-data"> 
  {% 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>

{%csrf_令牌%}
研究人员姓名:

研究总结
上传您的IRB批准函:
目标页面

<div class="tab-pane" id="irb">
          <h4> List of file(s) uploaded:</h4>


        <!--File upload-->
          {% if documents %}
              <ul>
              {% for file in documents %}
                  <li><a href="{{ file.document.url }}"> {{ file.document.name }} </a></li>
              {% endfor %}
              </ul>
          {% else %}
              <p>No such documents available.</p>
          {% endif %}
        <!--File upload ends-->
          </div>

          {% if high_scores %}
          {% for hs in high_scores %}
          <div class="tab-pane" id="{{ hs.link_name }}">
            {% high_score request exp.link_name hs.link_name %}
          </div>
          {% endfor %}
          {% endif %}

上载的文件列表:
{%if文档%}
    {%用于文档中的文件%}
  • {%endfor%}
{%else%} 没有这类文件

{%endif%} {如果分数高,则为%} {hs在高_分数中的百分比%} {%高分请求exp.link\u name hs.link\u name%} {%endfor%} {%endif%}
正如@几乎是初学者所指出的,如果表单提交成功,您应该重定向到其他视图。如果不是,(在您的情况下),当页面重新加载时,将再次执行
POST
请求的代码。你的表格再次提交。我可以建议你改变一下看法

def about_experiment(request, ex_link_name):
    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),
      'posts':Help.objects.filter().order_by('-date')[0],
      'documents':Help.objects.all()
    }

    if exp.about_file:
        context['about_file'] = settings.EXPERIMENT_DIRS+exp.about_file.get_include_path()

    if request.method == 'POST':
        form = AboutHelp(request.POST, request.FILES)

        if form.is_valid():
            obj = form.save(commit = False)
            obj.save()
            return redirect(reverse('lazer.views.about_experiment', kwargs={ 'ex_link_name':obj.link_name }))
    else:
        form = AboutHelp()

    return render(request, 'about_experiment.html', context)

这里,我只是假设您的
obj
有一个字段
link\u name
。您可能需要根据您的型号进行更改。

刷新页面时,您希望发生什么?如果尚未指定响应,则这是特定浏览器中的行为。考虑使用<代码> HythPrimSereEngule将用户重定向到另一个视图,或重定向到当前视图。这样,您的刷新问题应该得到修复。如何仅重定向到当前视图?基本上,我想重定向到同一页进行相同的实验/关于/exp\u name然后不要重新加载页面。当您在浏览器中重新加载页面时,是否会出现一个弹出窗口,其中包含两个选项
continue
cancel
?我的意思是,在提交表单后重新加载页面时。检查一下。是的,没有任何问题。HttpResponseRedirect运行良好,只是我不知道如何重定向到具有特定实验名称的特定URL。要显示此页面,Firefox必须发送重复先前执行的任何操作(如搜索或订单确认)的信息。使用“重新发送”和“取消”选项