在我的Django應用程序中,用戶呈現一個簡單的表單,在驗證視圖搜索數據(一些網頁抓取)並返回一個模板其中我們添加了結果列表的上下文,我們將它們呈現給用戶,並且他/她選擇一個(這是我的問題)我想讓該選項回到另一個視圖(現在我們要添加選中對象到數據庫)。Django - 從模板表單返回對象(從搜索結果)
我發現我的問題,但我真的認爲我錯過了一些東西,並沒有正確使用Django。現在這就是我如何顯示數據並將其放回一個表單中:(當然,我使用更多的屬性來完成此操作,所以模板非常大,我必須爲每個要返回的值添加一個隱藏的輸入)
for b in result_list
h4
for aut in b.authors
div {{ aut }}
form(action='/add/', method='post') {% csrf_token %}
{% csrf_token %}
input(type='hidden', value="{{ b.authors }}", name='authors')
EDIT2:有每本書一個按鈕。我只是想返回一本書。
當作者有一個單一元素時它可以正常工作,但不止一次模板不返回有效的json。我可以給你的結構,但我傾向於認爲這不是重點。
我缺少什麼?如何顯示搜索結果並將選定的一個顯示到另一個視圖?
我錯過了關於表單的東西嗎?我應該使用一個會話變量,一個帶中間件的上下文處理器嗎?我想隱藏的輸入是錯誤的:我怎麼能做不同?
千恩萬謝
編輯:下面我展示在我的問題。但是,也許我不應該解決這個問題,而是用正確的方式使用Django。
1 - 我的第一視圖呈現模板,並與搜索結果餵它:
return render(request, "search/search_result.jade", {
"return_list": book_list,
})
book_list
是類型的字典列表,其中authors
是unicode海峽的列表:
retlist[0]["authors"]
>>> [u'Ayroles, Alain']
2 - 我的模板在上面。它顯示一個表單和一個隱藏的輸入。我們的目標是發回一本書:一本書名爲詞典,編輯......以及一份作者名單。
3-現在用戶點擊「添加此書」,我們處於「添加」視圖。讓我們來考察作者:
req = request.POST.copy()
authors = req["authors"]
>>> u"[u'Ayroles']" # note the u after the [
# this is not a valid json, I can't get a list out of it
import json
json.loads(req["authors"])
>>> *** ValueError: No JSON object could be decoded
所以我從第一個視圖模板通過的名單,我分析它,並顯示它,但模板沒有一個有效的列表/ JSON返回的第二視圖POST參數和我無法提取我的作者。我不知道在想什麼:
- 還有什麼我想要做的是不錯,我只是要更好地處理我的數據結構
- 否則我就不會做這樣的,使用更多的Django的:使用更多的表單?會議?
可以提供更多的細節?我仍然無法解決問題。例如。 - 我有網頁,有多個選擇,形式包含在-format- IDS,我想選擇的對象ID傳遞到表單處理程序,它應該做的-blablablah-,這是行不通的,而不是權利, - 我期望得到什麼 - 錯誤結果 - 。 (?)而且,模板(?僞)代碼看起來怪怪 – Marat
嗨,也許這是什麼使得它更加困難:沒有對象ID,因爲我沒有從數據庫中獲取我的搜索結果。 (該模板是一個可以編譯爲html的jade模板:http://jade-lang.com/reference/縮進非常重要,就像在Python中一樣)。一個推導出的問題:您認爲在模板中編寫±10個隱藏輸入以獲取值是一種很好的做法嗎? – Ehvince
好吧,無論如何,你必須以某種方式識別這些實體(也許是URL)。是的,有多個隱藏輸入是完全可以的。用戶應該能夠選擇多個項目?您希望用戶如何選擇作者(例如,通過勾選框,下拉列表,單擊特定的作者)? – Marat