Почему я получаю TypeError: контекст должен быть диктатом, а не контекстом. Django - PullRequest
1 голос
/ 13 января 2020

Попытка настроить веб-страницу для перечисления тегов для стартапов (далее в Django раскрыто). Книга использует Django 1.8, а я использую 3.0. Есть места, где я видел устаревшие функции в книге и смог найти обновленную замену, но я не могу понять, почему django выдает мне эту ошибку при загрузке домашней страницы. Все еще немного нового в Python и Django. У меня есть теги, созданные при выполнении Tag.objects.all(), и один запуск был сохранен в базе данных, у которой есть связанный тег.

Views.py

from django.shortcuts import render
from django.http.response import HttpResponse
from .models import Tag 
from django.template import Template, Context, loader

def homepage(request):
    tag_list = Tag.objects.all()
    template = loader.get_template('organizer/tag_list.html')
    context = Context({'tag_list':tag_list})
    output   = template.render(context)
    return HttpResponse(output)

Tag_list. html

{% extends parent_template|default:"organizer/base_organizer.html" %} #An alternative reference to "base.html"

{% block title %}
{{ block.super }} - Tag List 
{% endblock %}

{% block content%}
<h2>Tag List</h2>
<ul>
    {% for tag in tag_list %}
      <li>
        <a href="">
          {{ tag.name|title }}</a>
      </li>

    {% empty %}
  <p><em>There are currently no Tags available.</em></p>
    {% endfor %}
</ul>
{% endblock %}

Ошибка типа в /

context must be a dict rather than Context.

Request Method:     GET
Request URL:    http://127.0.0.1:8000/
Django Version:     3.0
Exception Type:     TypeError
Exception Value:    

context must be a dict rather than Context.

Exception Location:     C:\Users\Antho\Desktop\suorganizer\su_env\lib\site-packages\django\template\context.py in make_context, line 270
Python Executable:  C:\Users\Antho\Desktop\suorganizer\su_env\Scripts\python.exe
Python Version:     3.7.5
Python Path:    

1 Ответ

0 голосов
/ 13 января 2020

Вы должны передать переменные контекста как dict объекты в шаблон, как показано ниже,

def homepage(request):
    tag_list = Tag.objects.all()
    template = loader.get_template('organizer/tag_list.html')
    context = {'tag_list': tag_list} # update this line
    output = template.render(context)
    return HttpResponse(output)

Кроме того, вы можете переписать представление, используя render() функция

def homepage(request):
    tag_list = Tag.objects.all()
    context = {'tag_list': tag_list}
    return render(request, 'organizer/tag_list.html', context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...