2017-05-31 16 views
0

私はPythonの設定ファイルで定義されている次の辞書を持っている:Jina2テンプレートの特定の辞書要素にアクセスするにはどうすればよいですか?

AUTHORS = { 
    u'MyName Here': { 
     u'blurb': """ blurb about author""", 
     u'friendly_name': "Friendly Name", 
     u'url': 'http://example.com' 
    } 
} 

私は、次のJinja2のテンプレートがあります。

{% macro article_author(article) %} 
    {{ article.author }} 
    {{ AUTHORS }} 
    {% if article.author %} 
     <a itemprop="url" href="{{ AUTHORS[article.author]['url'] }}" rel="author"><span itemprop="name">{{ AUTHORS[article.author]['friendly_name'] }}</span></a> - 
     {{ AUTHORS[article.author]['blurb'] }} 
    {% endif %} 
{% endmacro %} 

をそして、私はこれを呼び出し経由:

<div itemprop="author creator" itemscope itemtype="http://schema.org/Person"> 
    {% from '_includes/article_author.html' import article_author with context %} 
    {{ article_author(article) }} 
</div> 

Pelicanテンプレートを生成すると、次のエラーが表示されます。

CRITICAL: UndefinedError: dict object has no element <Author u'MyName Here'> 

私は私のテンプレートから{% if article.author %}ブロックを削除すると、ページが正しく表示さ{{ AUTHORS }}変数を適切に生成します。これは明らかにMyName Here鍵を持っている:

<div itemprop="author creator" itemscope itemtype="http://schema.org/Person"> 
    MyName Here 
    {u'MyName Here': {u'url': u'http://example.com', u'friendly_name': u'Friendly Name', u'blurb': u' blurb about author'}} 
</div> 

私は私のテンプレートで正しくMyName Here要素にアクセスするにはどうすればよいですか?

+1

'article.author'は実際にstring/unicodeタイプですか? – Feodoran

答えて

1

は、'Your Name'だけでなく、さまざまなプロパティを持つan Author instanceです。あなたのケースでは、あなたがしたい:

{% if article.author %} 
    <a itemprop="url" href="{{ AUTHORS[article.author.name].url }}" rel="author"> 
     <span itemprop="name">{{ AUTHORS[article.author.name].friendly_name }}</span> 
    </a> - 
    {{ AUTHORS[article.author.name].blurb }} 
{% endif %} 

や、定型の一部を軽減するために、あなたが使用することができます。

{% if article.author %} 
    {% with author = AUTHORS[article.author.name] %} 
     <a itemprop="url" href="{{ author.url }}" rel="author"> 
      <span itemprop="name">{{ author.friendly_name }}</span> 
     </a> - 
     {{ author.blurb }} 
    {% endwith %} 
{% endif %} 

限り、あなたはあなたのJINJA_ENVIRONMENTさんextensionsリストで'jinja2.ext.with_'を持っているように。

Jinjaテンプレートでindex['notation']ではなくdot.notationを使用できます。

関連する問題