Django {% include%} HTML неправильно отображается - PullRequest
0 голосов
/ 13 февраля 2012

Я новичок в Django и Python, пожалуйста, прости меня, если это вопрос новичка. У меня есть приложение, где у меня есть 3 просмотра:

#views.py

from django.shortcuts import render_to_response
from django.shortcuts import render
from django.http import HttpResponse, HttpRequest, HttpResponseRedirect
from acme.acmetest.models import Player
from acme.acmetest.models import PickForm

def playerAdd(request, id=None):
    form = PickForm(request.POST or None,
                       instance=id and Player.objects.get(id=id))

    if request.method == 'POST' and form.is_valid():
        form.save()
        return HttpResponseRedirect('/draft/')

    return render(request, 'makepick.html', {'form':form})

def draftShow(request):
    draft_list = Player.objects.all()
context_instance=RequestContext(request)
    return render_to_response('listpicks.html', {'draft_list' :draft_list})

def draftPage(request):
    return render(request, 'pickpage.html')

Представления playerAdd и draftShow отображаются правильно, когда они вызываются самостоятельно в браузере (сопоставлены отдельным URL-адресам в отдельных документах HTML). Представление draftPage вызывает страницу HTML:

pickpage.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML lang="en">
<head>
    <title>PickPage</title>
</head>
<body>

{% include "makepick.html" %}
{% include "listpicks.html" %}

</body>
</HTML>

Когда я вызываю эту страницу, я получаю только часть двух других html-страниц. Я получаю кнопку в форме, но не поле для ввода теста, и я получаю текст списка, но не список, который извлекается из базы данных. Это просто HTML-страницы, и, как я уже говорил ранее, они работают, когда я вызываю их самостоятельно.

Спасибо за помощь.

дп

1 Ответ

4 голосов
/ 13 февраля 2012

Ваша проблема в том, что вы путаете включения с представлениями.

Когда вы используете включение, все, что происходит, это то, что HTML для этого шаблона вставляется в этот момент.

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

Таким образом, в вашем случае контекст из playerAdd и draftShow недоступен, поскольку вы не добавили его вМетод рендеринга в draftPage.

def draftPage(request):
    form = PickForm()
    draft_list = Player.objects.all()
    context = {
        'form':form,
        'draft_list' :draft_list,
    }
    return render(request, 'pickpage.html', context)

По вашему мнению, даст вам то, что вам нужно.Просто убедитесь, что форма отправляется в представление playerAdd для правильной обработки.

...