2016-11-15 64 views
1

剛開始學習python django框架,我試圖在html頁面中顯示一個自定義查詢結果。python django在html中自定義查詢結果

def index(request): 
    with connection.cursor() as cursor: 
     cursor.execute("SELECT * FROM polls_post") 
context ={ 
     'all_posts':cursor.fetchall() 
    } 

在我的HTML頁面

<ul> 
     {% for post in all_posts %} 
      <li>{{ post }}</li> 
     {% endfor %} 
    </ul> 

但它顯示的值的元組,所以我怎樣才能查詢與表的列名的結果,例如我可以打印像這樣的價值觀

<ul> 
      {% for post in all_posts %} 
       <li>{{ post.title }}</li> 
       <li>{{ post.name }}</li> 
      {% endfor %} 
     </ul> 
+1

如果你剛開始學習Django的,你發什麼認爲最好的方法是運行原始SQL查詢而不是使用記錄良好的模型層? –

+0

我需要知道這是可能的,這就是所有:) –

回答

3

不能 - 使用光標,你需要自己內部視圖重新包裝的數據和然後將對象列表傳遞給模板。

喜歡的東西

posts = [] 

with connection.cursor() as cursor: 
    cursor.execute("SELECT * FROM polls_post") 

    for obj in cursor.fetchall(): 
     posts.append({"title": obj[0], "name": obj[1]}) 
context = {'all_posts':cursor.fetchall()} 

不過我想你更願意使用Django的ORM框架。那麼看看Model reference

+0

是否有任何簡單的操作呢?無需手動使用列名 –

+0

@BlessanKurien,查看文檔參考 - https://docs.djangoproject.com/el/1.10/topics/db/sql/ 有一個使用'cursor.description' – maxwell

1

爲什麼你在你的視圖中使用sql查詢。嘗試使用Django ORM and QuerySets

可能這是幫助你

Django的查看

def your_view(request): 
    all_posts = your_model_class_name.objects.all() 
    return render_to_response("your_html.html", {'all_posts': all_posts}) 

而且在你的HTML頁面

<ul> 
    {% for post in all_posts %} 
     <li>{{ post.title }}</li> 
     <li>{{ post.name }}</li> 
    {% endfor %} 
</ul> 
+0

我會得到'polls_post'中的未解決的參考錯誤 –

+0

杆柱是你的類名請替換它。 –

+0

所以我需要使用ORM層,但我不需要它 –

1

你也可以這樣做

def your_view(request): 
    all_posts = model_class_name.objects.raw("Select * from tablename"); 
    return render_to_response("your_html.html", {'all_posts': all_posts}) 

,並在模板

<ul> 
    {% for post in all_posts %} 
     <li>{{ post.title }}</li> 
     <li>{{ post.name }}</li> 
    {% endfor %} 
</ul> 

原始查詢是有幫助的,當我們使用複雜的查詢