2017-05-16 3 views
0

私はフラスコフラットページでブログを構築しています。マークダウンblogpostのヘッダーには、関連するブログポストをファイル名で一覧表示します。これらは、実際のブログ投稿の下に抜粋として表示されます。ここでビューのようなロジックを持つテンプレートにスニペットを含めます

はblogpost-1.md何で次のようになります。基本的な部分は、関連blogpostingsのパスをたどり、レンダリングすることです

BLOGPOST ONE 

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer vel 
leo turpis. Cras vulputate mattis dignissim. Aliquam eget purus purus. 

related posts: 

BLOGPOST TWO 
Summary here 

BLOGPOST THREE 
Also a summary 

title: "Blogpost one" 
published: 2014-02-13 
related: 
    - blogpost-2.md 
    - blogpost-4.md 
description: "This is the excerpt of blogpost one." 

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer 
vel leo turpis. Cras vulputate mattis dignissim. Aliquam eget 
purus purus. 

そして私が望む結果彼らのタイトルと例外。単純のようなもの:

{% for item in blog.meta.related %} 
    <div> 
    <h4>{{ item.title }}</h4> 
    <p>{{ item.decription</p> 
    </div> 
{% endfor %} 

は、これは明らかにmeta.relatedは、単に文字列のリストであるため、仕事に行くのではありません。

# app.py 
@app.route('/excerpt/<path:path>.html') 
def excerpt(path): 
    blog = blogs.get_or_404(path) 
    return render_template('excerpt.html', blog=blog) 

# excerpt.html 
<div> 
<h4>{{ blog.meta.title }}</h4> 
<p>{{ blog.meta.description }}</p> 
</div> 

私の質問:どのように私は、これは同じテンプレート内で発生させるか、これらの文字列を取り、をhttpResponseを返すビュー機能を作成することも困難ではないでしょうか?

関連するブログポスティングのデータをコンテキストに渡すようにしてください。辞書のリストは多分でしょうか?これを達成するためにコンテキストプロセッサを使用する必要がありますか?

答えて

1

ヘイロイ、あなたのためのおかげで研究が、一瞬のために、私はこれを明確にする方法を見つける必要がありそうコメントすることはできません。この作業を行うためには

は、マークダウンファイルにあなたが書いた:

title: "Blogpost one" 
published: 2014-02-13 
related: 
- blogpost-2.md 
- blogpost-4.md 
description: "This is the excerpt of blogpost one." 

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer 
vel leo turpis. Cras vulputate mattis dignissim. Aliquam eget 
purus purus. 

を変更する必要がblogpost-2.mdとた.md拡張子なしblogpost-4.md。フラスコにflatpagesがた.md拡張子を理解していますので、

for path in blog.meta['related']: 
     related_list.append(blogs.get_or_404(path)) 

ブログ投稿-1/2.md はあなたのリストにを追加されず、404エラーがアップします:ビューファイルにあなたのループは、これらの変更がなければ 。私の場合は

@app.route('/blog/<path:path>.html') 

はなしに変更されます。HTMLのような:

@site.route('/bloging/<path:path>/') 

そして、いくつかのコーディングを簡素化する、テンプレートに

{{ related.meta.title }} 

{{ related.title }} 

に相当し、あなたとあなたの関連記事へのリンクを追加することができます。

<a href="{{ url_for('site.bloging', path=related.path) }}">{{ related.title }}</a> 

ここで、si私の青写真です。

0

私はかなり簡単な答えに達しましたが、より洗練されたソリューションがあるかどうかを知るために質問を開いています。

ビュー機能では、関連するブログ投稿のパスを繰り返し、リストにブログオブジェクトを追加して、テンプレートに渡します。

@app.route('/blog/<path:path>.html') 
def blog_detail(path): 
    blog = blogs.get_or_404(path) 
    related_list = [] 
    for path in blog.meta['related']: 
     related_list.append(blogs.get_or_404(path)) 
    return render_template('blog-detail.html', blog=blog, related_list=related_list) 

、テンプレート内:このよう

{% for related in related_list %} 
    hoi 
    <div> 
     <h4>{{ related.meta.title }}</h4> 
     <p>{{ related.meta.description }}</p> 
    </div> 
{% endfor %} 
関連する問題