2016-11-15 12 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

、複雑なクエリを使用する場合

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

生のクエリは有用である。この

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}) 

のように、テンプレートで行うことができます最良の方法は、よく文書化されたモデルレイヤーを使用するのではなく、生の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

あなたはまた、我々は何があなたを作っ

あなただけのジャンゴを学び始めた場合