Noobie нужна помощь в отладке простого кода на python / django. Почему этот вид не работает? - PullRequest
0 голосов
/ 14 января 2012

Я пытаюсь выполнить простое упражнение в верхней части страницы здесь: http://www.djangobook.com/en/2.0/chapter07/. Когда пользователь переходит на mysite.com/meta/, я хочу отобразить простую HTML-таблицу на странице, показывающей HTTPRequestметаданные.

В моем файле urls.py есть:

from django.conf.urls.defaults import patterns, include, url
from mysite.views import display_request_meta_data

urlpatterns = patterns('',
    url(r'^meta/$', display_request_meta_data),
)

В моем файле views.py есть:

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import logging

logger = logging.getLogger(__name__)

def display_request_meta_data(request):
    meta_data = request.META.items()
    meta_data.sort()
    for x in meta_data
        # print x  # wasn't working, so I tried using a logger instead.
        logger.error(x)
    t = get_template('http_meta_data_table.html')
    html = t.render(Context(*meta_data_dict))
    return HttpResponse(html)

В каталоге шаблонов яесть файл с именем http_meta_data_table.html, который содержит следующее:

<html>
<head>
    <title>HTTP Meta Data</title>
</head>
<body>
    <table>
        {% for key, value in meta_data_dict %}
            <tr><td>{{key}}</td><td>{{value}}</td></tr>
        {% endfor %}
    </table>
</body>
</html>

Ответы [ 2 ]

1 голос
/ 14 января 2012

А как же:

def display_request_meta_data(request):
    meta_data = request.META.items()
    meta_data.sort()
    for x in meta_data: # you were missing a semi column
        # print x  # wasn't working, so I tried using a logger instead.
        logger.error(x)
    t = get_template('http_meta_data_table.html')
    html = t.render(Context({'meta_data': meta_data})) # the dict doesn't exitst
    return HttpResponse(html)

В html диктат тоже не существует:

<html>
<head>
    <title>HTTP Meta Data</title>
</head>
<body>
    <table>
        {% for key, value in meta_data %}
            <tr><td>{{key}}</td><td>{{value}}</td></tr>
        {% endfor %}
    </table>
</body>

</html>

Это не имеет ничего общего с django, это очень простая ошибка. Изучение программирования с использованием фреймворка - плохая идея IMO. Вы должны изучить основы раньше, или ваша кривая обучения будет выглядеть как прямолинейная стена.

Django - это простая структура для изучения, но предполагается, что вы знаете Python.

0 голосов
/ 14 января 2012

meta_data_dict не определено. Вы, вероятно, должны были передать meta_data на t.render

...