2017-09-26 53 views
1

我有一個視圖,它顯示了從一個日期到另一個日期的項目,關於某個項目。該項目模型被稱爲「DNN」,並且時間在「Vnos」模型中。從模板中查看Django調用腳本

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文件做一個單獨的視圖,因爲這是一次又一次的計算。 謝謝

回答

0

我解決了這個麻煩,使用POST方法,因爲GET方法會覆蓋模板中的previus表單中的參數。 Previus的論點是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 
0

嗯,如果你想送,你可以做這樣的事情的自定義參數:

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

然後在視圖中,您只需檢查:

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

是的,我試過了,但沒有奏效。這背後的原因是我傳遞了通過GET方法包含在模板中的表單參數。參數是from_date和to_date。這意味着在使用?pdf執行操作之後,它將全部重置。 –