1

免責事項:私はJSONの解析とアクセスにまったく慣れておらず、djangoのロープを手に入れ始めたばかりです。

詳細:

djangoテンプレートで取得したJSONオブジェクト内のデータにアクセスしようとしています。

JSONの例:

{"entry":[
{"id":"1234567","hash":"1234567",
..."name":{"givenName":"John","familyName":"Doel","formatted":"John H. Doe"},
..."currentLocation":"Los Angeles, CA",
..."emails":[{"primary":"true","value":"jdoe@example.com"}],
..."accounts":[
    ...{"domain":"facebook.com","url":"http:\/\/www.facebook.com\/john.doe",..."shortname":"facebook"},
    ...{"domain":"twitter.com","display":"@jdoe411","url":"http:\/\/twitter.com\/jdoe411",..."shortname":"twitter"}],
..."urls":[{"value":"http:\/\/www.example.com","title":"example url"},]}
]}

Djangoテンプレートタグで取得:

@register.inclusion_tag('includes/gravatar_links.html')
def gravatar_links(email, first_name):
    url = "http://www.gravatar.com/" + hashlib.md5(email.lower()).hexdigest()
    url += '.json'

    response = urllib2.urlopen(url)
    interm = simplejson.load(response)
    data = simplejson.dumps(interm)
    name = first_name

return {'gravatar_links': {'name': name, 'data': data}}

これを呼び出すだけ{{ gravatar_links.name }}{{ gravatar_links.data }}、説明されているようにユーザーの名前とJSONデータを確認できます。

ゴール:

JSONオブジェクトの特定のキー、つまり"accounts"とにアクセスし"urls"、出力をカスタマイズしたい(例)"Follow {{ gravatar_links.name }} on <a href="{{ gravatar_links.data.accounts.url }}">{{ gravatar_links.data.accounts.shortname }}</a> and see their work at <a href="{{ gravatar_links.data.urls.url }}">{{ gravatar_links.data.urls.title }}</a>"

理想的には次のものが生成されます。

"Follow John on Twitter and Facebook and see their work at example url"

質問:

  1. これを行うにはdjango/pythonを使用する必要がありますか、それともjQueryでより適切に処理できますか?
  2. "accounts"リストとして提供されている場合、コンマ区切りのリストとして出力するにはどうすればよいですか?
  3. この方法で知っておくべきセキュリティ上の問題はありますか?
4

2 に答える 2

0

カンマ区切りのリストには、joinDjango(https://docs.djangoproject.com/en/dev/ref/templates/builtins/)のテンプレートタグを使用します。

{{ accounts|join:", " }}

もっと凝ったものにしたい場合は、独自のテンプレートタグを作成できます(見た目ほど難しくはありません!)。

于 2013-03-17T20:08:08.243 に答える
0

テンプレートタグは次のようになっている必要があります。

@register.inclusion_tag('includes/gravatar_links.html')
def gravatar_links(email, first_name):
    url = "http://www.gravatar.com/" + hashlib.md5(email.lower()).hexdigest()
    url += '.json'

    response = urllib2.urlopen(url)
    interm = simplejson.load(response)
    accounts_list = interm["entry"][0]["accounts"]
    data = simplejson.dumps(interm)

    return {'gravatar_links': {'accounts': accounts_list, 'name': first_name, 'data': data}}

accounts_list = interm["entry"][0]["accounts"]次に、jsonオブジェクトの要素にアクセスするために、次のようなものを引き続き使用できます"urls"urls_list = interm["entry"][0]["urls"]

テンプレートにforループを設定し、次のような項目を繰り返す可能性のある要素の場合dictionary[element: {key1=>value1, ...}, {key2=>value2, ...}]

and follow {{ gravatar_links.name }} on 

{% for o in gravatar_links.accounts %}
    {% if not forloop.first and not forloop.last %}, {% endif %}
    {% if forloop.last %} and {% endif %}

    <a href="{{ o.url }}">{{ o.shortname }}</a>

    {% if forloop.last %}.{% endif %}
{% endfor %} 

追加のif forloopステートメントは、出力を構成します。

and follow John on facebook and twitter.

2つ以上のURL: and follow John on facebook, linkedin, and twitter.

于 2013-03-17T20:55:07.907 に答える