【问题标题】:Django call script in view from template从模板视图中的 Django 调用脚本
【发布时间】:2018-03-07 16:25:25
【问题描述】:

我有一个视图,它显示关于某个项目的从一个日期到另一个日期的条目。项目模型称为“DNN”,时间在“Vnos”模型中。

views.py:

def po_nalogu(request, dnn = None):
dnn = None

form = PregledDNNForm(
    request.GET or None,
)
from_date = get_month_start(timezone.now())
to_date = from_date + relativedelta(months=1)
if request.GET:
    if form.is_valid():
        from_date, to_date, dnn = form.save()
entries_qs = Vnos.objects.filter(dna__dns__dnn = dnn)

month_entries = entries_qs.timespan(from_date, to_date=to_date).order_by('start_time')
sestevek = 0
for entry in month_entries:
    sestevek = sestevek + entry.hours

template = 'porocila/po_nalogu.html'
context = {
    'form' : form,
    'from_date': from_date,
    'to_date': to_date - relativedelta(days=1),
    'entries': month_entries,
    'sestevek' : sestevek,
}

return render(request, template, context=context)

现在,我想添加一个条件句,以便打印 PDF。有没有办法添加类似的东西:

if request.method == "PDF"
    do code

在模板中:

<form action="" method="PDF">
    <input type="submit" />
</form>

我不想为 PDF 文件单独查看,因为开始日期和结束日期,因为它需要大量计算一次。 谢谢

【问题讨论】:

    标签: python html django django-forms django-templates


    【解决方案1】:

    嗯,如果你想发送一个自定义参数,你可以这样做:

    <form method="GET" action="/path/to/action/?pdf">
    

    然后在你刚刚检查的视图中:

    request.GET.get('pdf', '')
    

    【讨论】:

    • 是的,我试过了,但是没有用。其背后的原因是我通过 GET 方法传递了表单的参数,该参数包含在模板中。参数是 from_date 和 to_date。这意味着在使用 ?pdf 操作后,一切都会被重置。
    【解决方案2】:

    我用 POST 方法解决了这个问题,因为 GET 方法覆盖了模板中以前表单中的参数。以前的参数是 from_date 和 to_date。这意味着带有 action="?pdf" 的 GET 方法会将其他所有内容设置为空白,并添加“?pdf”。

    然而,这非常有效。

    模板:

    <form method="POST" action="" class="pull-right">
    {% csrf_token %}
        <button type="submit"> PDF</button>
    </form>
    

    views.py:

    if request.POST:
        context = {
            'request' : request,,
            'from_date': from_date,
            'to_date': to_date - relativedelta(days=1),
        }
        html_string = render_to_string("pdf.html", context)
        html = HTML(string = html_string)
        pdf = html.write_pdf()
        response = HttpResponse(pdf, content_type = 'application/pdf')
        response['Content-Disposition'] = 'attachment; filename="FILENAME.pdf"
        return response
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 2010-10-22
      • 2013-07-10
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 2011-11-28
      相关资源
      最近更新 更多