Вкладки пользовательского интерфейса jQuery в шаблонах django - PullRequest
0 голосов
/ 26 февраля 2012

У меня есть шаблон с множеством вкладок (пользовательский интерфейс jQuery):

 <div>
     Satus: <span id="status_value"> {{  purchase.get_status_display }}</span>
     Owner: <span id="admin_value"> {{ purchase.owner }}</span> 
    </div>

    <div class="tabs">
        <div class="tabs-navigation">
            <ul>
                <li><a href="{% url purchase_info_tab %}">Purchase description</a></li>
                <li><a href="{% url purchase_catalog %}">Purchase catalog</a></li>
            </ul>
        </div>
    </div>

Это view.py, сначала я отображаю основной шаблон, а не вкладку рендеринга ajax. В данном случае purchase_info_tab для основного шаблонаМне нужна модель Покупка, а для purchase_info_tab мне нужна модель Покупка, и у нас есть два одинаковых запроса.Можно ли как-то избежать этого?

@render_to('app/purchase_view.html')
def purchase_view(request, purchase_id):

    try:
        purchase = Purchase.objects.get(id=purchase_id)
    except Purchase.DoesNotExist:
        raise Http404() 

    return {
        'purchase': purchase,

    }

@render_to('app/tabs/info_tab.html')
def purchase_info_tab(request):

    purchase = #I  load one model twice in one page

    try:
        itemsgroups = ItemsGroup.objects.filter(purchase=purchase).all()
    except IndexError:
        raise Http404()

    return {
           'itemsgroups': itemsgroups,
        }

Ответы [ 2 ]

0 голосов
/ 26 февраля 2012

Есть много способов избежать этого.

Самым простым является использование сессий , как таковых:

@render_to('app/purchase_view.html')
def purchase_view(request, purchase_id):

    try:
        purchase = Purchase.objects.get(id=purchase_id)
    except Purchase.DoesNotExist:
        raise Http404() 
    else:
        request.session['purchase'] = purchase

# [snip]

@render_to('app/tabs/info_tab.html')
def purchase_info_tab(request):

    purchase = request.session['purchase']

    # [snip]
0 голосов
/ 26 февраля 2012

С точки зрения Django, ваши два представления полностью разделены, и вы не можете обмениваться информацией между ними, не сохраняя ее в каком-то третьем месте, например в параметре URL или сеансе (помните, что методы представления могут выполняться даже на разных серверах в зависимости от того, как приложение развернуто).

Однако в приведенном вами примере это не нужно. Вам не нужно извлекать объект покупки, чтобы получить ItemsGroup: вы можете передать идентификатор в свой запрос:

    itemsgroups = ItemsGroup.objects.filter(purchase__id=purchase_id).all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...