Viewに複数のmodelを指定する方法 [Django]

Viewに複数のmodelを指定する方法 [Django]


donald chi / 2017-03-11 16:03

音声ファイル作成中...
Audio: Visited: 7682


Djangoでは、html viewを作成する時に、そのページに対応する modelを指定しなければならない。 基本的に一つのページに 一つのmodelを対応するだけで十分だが、今回は、ブログのメインページに blog modelとtag modelを参照に、それぞれリストを表示したいので、 一つのviewに複数のmodelを指定する方法について調べた。


Modelの定義

models.py
class Tag(models.Model):
    name = models.CharField(max_length=255)
    description = MarkdownxField()
    def __str__(self):
        return self.name

class MyBlog(models.Model):
    title = models.CharField(max_length=255)
    body = MarkdownxField()
    tags = models.ManyToManyField(Tag)
    author = models.ForeignKey(User, null=True)
    publishing_date = models.DateTimeField(auto_now_add=True)
    slug = models.SlugField()
    def __str__(self):
        return self.title

今回の目標は、 メインページにblog listとtag listを表示することである。 そのため、viewの定義で、modelを指定する他、get_context_dataから 取得した内容をupdateする必要がある。

Viewの定義

views.py
class BlogListView(ListView):
    model = MyBlog
    template_name = "blog_list.html"
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context.update({
            'tag_list': Tag.objects.order_by('name'),
            'more_context': Tag.objects.all(),
        })
        blog_list = MyBlog.objects.all().order_by('-publishing_date')[:5]
        return context
    def get_queryset(self):
        return MyBlog.objects.order_by('publishing_date')

上のコードでは、MyBlogから内容をcontextに格納するほか、 Tagからの内容もcontext.updateを通して、格納している。

最後は、templateを使って、表示するだけ。

Templateの定義

blog_list.html  
{% load markdown_deux_tags %}
{% block content %}
<div class="primary col-md-8 col-sm-12 col-xs-12">
    {% for blog in object_list %}
    <section class="about section" id="aboutme">
        <div class="section-inner">
            <h2>{{ blog.title }}</h2>
            <div class="content">
                <font style="color: black;">
                    {{ blog.body|markdown:"STYLE"|safe|escape|truncatechars:300 }}
                </font>
            </div><!--//content-->
            <p><a role="button" href="{% url 'blog_details' slug=blog.slug %}" style="color: blue;">View details 
            <i class="fa fa-angle-double-right" aria-hidden="true"></i></a></p>
        </div><!--//section-inner-->                 
    </section><!--//section-->
    {% endfor %}
</div><!--//primary-->
<div class="secondary col-md-4 col-sm-12 col-xs-12">
    <div class="section-inner">
        <h2>All tag</h2>
        {% for tag in more_context %}
            <div class="content">
                <font style="color: black;">
                    {{ tag }}
                </font>
            </div><!--//content-->
        {% endfor %}
        </div><!--//section-inner-->                
</div><!--//row-->
{% endblock %}

0

0

Share with: Facebook Twitter Google+ LinkedIn Wechat Email Print

Comments: 7 件


ブランド時計コピー
yoyfhlfv@live.jp

売れ筋★高級レザー!男女の財布!ロレックス デイトナハイブランドの一流アイテムをお手頃価格でご提供。 送料無料★20気圧クロノグラフ搭載人気メンズ腕時計★ プレゼントに当店オススメなGAGA MILANO GAGA MILANO 最安値に挑戦中! 温もり溢れるレザー財布がズラリ!福を呼び込む春財布 当店人気の海外ブランドが最安値挑戦価格!要チェック 水をはじくリバティボストン 軽量生地を使用した大容量ボストンバッグ 当店人気NO.1!女子に嬉しいたっぷり収納レザー長財布 [url=https://www.raku78.com/product-1181.html]ブランド時計コピー[/url]

スーパーコピーブランド
iufkjh@docomo.ne.jp

人気の売れ筋商品を多数取り揃えております。全て激安特価でご提供.お願いします. 迅速、確実にお客様の手元にお届け致します。 実物写真、付属品を完備しております。 低価格を提供すると共に、品質を絶対保証しております。 商品の交換と返品ができます。 ブランドコピーバッグの誠実と信用の店 24時間以内に出荷し、3~4日に到着して、 スーパーコピーブランド https://www.ginzaok.com/brand/brand.aspx?s_id=59&page=3

ウブロ スーパーコピー
jmtfdlkuc@ybb.ne.jp

ルイヴィトン ブランドコピー N級バッグ、財布 専門サイト問屋 弊社は販売ルイヴィトンバッグ、財布、 小物、腕時計、靴類などでございます。 弊社は「信用第一」をモットーにお客様にご満足頂けるよう、 発送前には厳しい検査を通じて製品の品質を保証してあげますとともに、 配送の費用も無料とし、品質による返送、交換、さらに返金までも実際 にさせていただきます。 また、従業員一同、親切、丁寧、迅速に対応 させて頂き、ご安心になってお買い物を楽しんでくださるよう精一杯力 を尽くしていくつもりです。 送料は無料です(日本全国)! ご注文を期待しています! 下記の連絡先までお問い合わせください。 是非ご覧ください! ウブロ スーパーコピー https://www.gooshop001.com/product/detail/11420.htm

スーパーコピー時計
gdiwja@docomo.ne.jp

E-mail対応、とても感じが良かったです。こちらの希望も快く対応頂きました。 また、機会があれば利用したい御店です。 新品同様!!★HERMES エルメス★ツイリー★リボンスカーフ★SILK100%★リボン柄★エルメスカラー・オレンジ色系★ 親切な対応でした エルメスのトゥイリー・リボン柄のものをコレクションしています。綺麗な御品が、割とお安く購入できて嬉しいです。 オレンジボックス無だったのが残念でしたが、新品品の購入ですしリーズナブルでしたので満足です。 ただ、商品画像にタグ部分の画像の掲載がなく、注文前にお店に電話で問い合わせをする必要がありました。通信販売ですので、詳しい画像の掲載があるようお願いできればと思います。 スーパーコピー時計 https://www.b2kopi.com/product/detail.aspx-id=6700.htm

偽物ブランド時計
hemyyzkpfd@goo.ne.jp

ブランドコピー時計ブランドコピー財布専門店 ルイ・ヴィトン | エルメス | グッチ | プラダ| セリーヌ | ゴヤール|エルメス特集 | ブランド館(拜购) ルイ・ヴィトン | エルメス | ゴヤール|ジュエリー・アクセサリー | 靴 主要取扱商品 バッグ、財布、腕時計、靴、装飾品、小物等! プロのブランドコピーの専門家,ブランドコピーの先駆者、国内で最高に成熟したブランドコピー専門店。 スイスのチップ適用、実物写真、実物が写真および描写と一致、公式サイトの外観、規格、機能と一致。 偽物ブランド時計 https://www.watcher007.com/bag/menu-pid-141.html

jimmy choo スーパーコピー 靴
dnyhutdt@gmail.com

最高品質 スーパーコピー N級品 全国送料無料 消費税無し! 送料無料! 手数料無料! 業務内容: 各種海外有名ブランド品を豊富に取り揃え、 しかもお客様を第一と考えて、驚きの低価格で提供しております ■ スタイルが多い、品質がよい、価格が低い! ■ 送料無料(日本全国) ご注文を期待しています! ■ 信用第一、良い品質、低価格は ■ 当社の商品は絶対の自信が御座います。 激安、安心、安全にお届けします.品数豊富な商 商品数も大幅に増え、品質も大自信です 100%品質保証!満足保障!リピーター率100%! ホームページ上でのご注文は24時間受け付けております jimmy choo スーパーコピー 靴 https://www.tentenok.com/product-8569.html

クロムハーツ 長財布 スーパーコピー 時計
twskhyj@excite.co.jp

2019激安通販専門店 ロレックス、ブルガリ、フランク ミュラー、 オーデマ ピゲ、ブライトリング、グッチ、エルメス、パネライ、 当店のブランドコピー商品は他店よりも質が高く、 金額も安くなっております。 ご購入する度、ご安心とご満足の届けることを旨にしております クロムハーツ 長財布 スーパーコピー 時計 https://www.b2kopi.com/brand/list.aspx-id=113.htm

Add Comment

Name:
Email:
Comment: