Goodreads APIをDjangoプロジェクトで使用しようとしています。私は、reviews_widgetを抽出する簡単なタグをセットアップし、cssスタイルとhtmlをテンプレートに送信しようとしています。ただし、styleとhtmlは送信時に登録されていません。 {{reviews_widget}}を使用すると、スタイルとHTMLが文字列として表示されますが、{%load reviews_widget%}には何も表示されません。Goodreads APIとDjango
book.html
{% extends "base.html"%}
{% block content %}
<!-- Does not render -->
{% load reviews_widget %}
<!-- Shows response in string format -->
{{ reviews_widget }}
<!-- What is sent to template-->
<!--
<style> #goodreads-widget { font-family: georgia, serif; padding: 18px 0; width:565px; }
#goodreads-widget h1 { font-weight:normal; font-size: 16px; border-bottom: 1px solid #BBB596;
margin-bottom: 0; } #goodreads-widget a { text-decoration: none; color:#660; }
iframe{ background-color: #fff; } #goodreads-widget a:hover { text-decoration: underline; }
#goodreads-widget a:active { color:#660; } #gr_footer { width: 100%; border-top: 1px solid #BBB596;
text-align: right; } #goodreads-widget .gr_branding{ color: #382110; font-size: 11px;
text-decoration: none; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } </style>
<div id="goodreads-widget"> <div id="gr_header"><h1><a href="https://www.goodreads.com/book/show/31430654-the-millionaire-booklet">
The Millionaire Booklet Reviews</a></h1></div> <iframe id="the_iframe"
src="https://www.goodreads.com/api/reviews_widget_iframe?did=DEVELOPER_ID&format=html&isbn=0990355454&links=660&min_rating=&review_back=fff&stars=000&text=000"
width="565" height="400" frameborder="0"></iframe> <div id="gr_footer"> <a class="gr_branding"
target="_blank" href="https://www.goodreads.com/book/show/31430654-the-millionaire-booklet?utm_medium=api&utm_source=reviews_widget">
Reviews from Goodreads.com</a> </div> </div>
-->
{% endblock %}
views.py
from django.shortcuts import render
from givegetapp.models import Give, Get, Reader
# For GoodReads Api
from django.http import HttpResponse
from django.template import Context, loader
from django.http import HttpRequest
import xml.etree.ElementTree as ET
import sys
import requests
from django import template
register = template.Library()
try:
import urllib.request as urllib2
except ImportError:
import urllib2
def book():
isbn = '0990355454'
key = 'devKEY' #replaced w/ dev key
response = requests.get('https://www.goodreads.com/book/isbn/'+isbn+'?key='+key)
tree = ET.fromstring(response.content)
reviews_widget = str
for leaves in tree[1]:
if leaves.tag == "reviews_widget":
print(str(leaves.text))
reviews_widget = str(leaves.text)
return render(request, "book.html", {"reviews_widget": reviews_widget})
templatetags/reviews_widget.py
from django import template
# For GoodReads Api
from django.http import HttpResponse
from django.template import Context, loader
from django.http import HttpRequest
import xml.etree.ElementTree as ET
import sys
import requests
from django import template
register = template.Library()
try:
import urllib.request as urllib2
except ImportError:
import urllib2
# end of GoodReads
register = template.Library()
@register.simple_tag()
def reviews_widget():
isbn = '0990355454'
key = 'g6mDefuBPg0ajE7c4Nwyg' #replace it with your developer key
response = requests.get('https://www.goodreads.com/book/isbn/'+isbn+'?key='+key)
tree = ET.fromstring(response.content)
reviews_widget = str
for leaves in tree[1]:
if leaves.tag == "reviews_widget":
# print(str(leaves.text))
reviews_widget = str(leaves.text)
# print(reviews_widget)
return {'reviews_widget': reviews_widget}
スタイルはheadセクションにする必要があるため、私は私がする考え出し応答を異なる変数に分割する必要があります。これをやり遂げるにはどうすればいいですか?また、テンプレートではレスポンスを文字列ではなくhtmlとしてどのように扱うことができますか?
良いもの。ありがとうございました。明確にするために、simple_tagは必要ありません。私は、views.pyで変数を設定してテンプレートに送ることができます。 – limaBEAN
Yepp!テンプレートタグを使用してデータをフォーマットする場合は、同様に行うことができます。しかし、テンプレート内で使用するのとまったく同じようにレスポンスHTMLを分割して表示する場合は、セーフフィルタをタックするだけで、期待どおりにレンダリングされます。 –