Классы в Django views.py - запутано - PullRequest
1 голос
/ 24 октября 2019

Я не смог найти ответ на свой вопрос здесь, что, вероятно, означает, что я лаю не на том дереве.

У меня есть сайт 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>

Дело в том, что новые ссылки будут выброшены, и я не обязательно буду сохранять их в базе данных. Единственный способ, которым яЯ знаю, что для создания объекта со многими подэлементами нужно использовать класс, но я не уверен, что мне нужно представление на основе классов.

Может ли кто-нибудь указать мне правильное направление? Спасибо большое!

...