Я не смог найти ответ на свой вопрос здесь, что, вероятно, означает, что я лаю не на том дереве.
У меня есть сайт Django, где я хотел бы создать страницу, которая использует BioPython дляполучить последние x записей из PubMed для конкретной строки поиска. Вывод BioPython сложен, поэтому, чтобы получить заголовок и реферат, я поиграл и написал тестовый код, который выводит словарь, который можно зациклить в шаблоне Django. (спасибо Марко Бонзанини https://gist.github.com/bonzanini/5a4c39e4c02502a8451d)
from Bio import Entrez
from pmterm import term
def search(query):
Entrez.email = 'david.hallsworth@x.com'
handle = Entrez.esearch(db='pubmed',
sort='pubdate',
retmax='20',
retmode='xml',
term=query)
results = Entrez.read(handle)
return results
def fetch_details(id_list):
ids = ','.join(id_list)
Entrez.email = 'david.hallsworth@hotmail.com'
handle = Entrez.efetch(db='pubmed',
retmode='xml',
id=ids)
results = Entrez.read(handle)
return results
title_abstract = {}
if __name__ == '__main__':
results = search(term)
id_list = results['IdList']
papers = fetch_details(id_list)
for i, paper in enumerate(papers['PubmedArticle']):
title = (paper['MedlineCitation']['Article']['ArticleTitle'])
abstract = ''
try:
for a in paper['MedlineCitation']['Article']['Abstract']['AbstractText']:
abstract += (a + " ")
except KeyError:
abstract = 'No abstract available'
title_abstract[title] = abstract
Тем не менее, теперь я понимаю, что я также хочу хранить ссылки и ссылки, поэтому словарь, вероятно, не путь вперед. На моем текущем сайте ясохранили статьи в модели и отобразили их следующим образом:
<div>
<h2>{{ entry.title }}</h2>
<h4>{{ entry.authors }} ({{ entry.year }}) {{ entry.journal }}</h4>
<h4>Reviewed by {{ entry.author.first_name }} {{ entry.author.last_name }} on {{ entry.date_added|date:'M d, Y'}}</h4>{% block header %}
<div>
<h2>{{ entry.title }}</h2>
<h4>{{ entry.authors }} ({{ entry.year }}) {{ entry.journal }}</h4>
<h4>Reviewed by {{ entry.author.first_name }} {{ entry.author.last_name }} on {{ entry.date_added|date:'M d, Y'}}</h4>
<a href="{{ entry.pub_med_url }}" target="_blank" class="btn btn-primary btn-sm"><span class="glyphicon glyphicon-book"></span> view on PubMed</a>
<div class="panel panel-default">
<div class="panel-heading">
<h4> Abstract </h4>
<h5>{{ entry.abstract }} </h5>
<h4>Full citation</h4>
<h5>{{ entry.citation }}</h5>
</div>
</div> <!-- panel -->
</div>
{% endblock header %}
<div class="panel panel-default">
<div class="panel-heading">
<h4> Abstract </h4>
<h5>{{ entry.abstract }} </h5>
<h4>Full citation</h4>
<h5>{{ entry.citation }}</h5>
</div>
</div> <!-- panel -->
</div>
Дело в том, что новые ссылки будут выброшены, и я не обязательно буду сохранять их в базе данных. Единственный способ, которым яЯ знаю, что для создания объекта со многими подэлементами нужно использовать класс, но я не уверен, что мне нужно представление на основе классов.
Может ли кто-нибудь указать мне правильное направление? Спасибо большое!