Очень базовая ошибка создания django-урока: TypeError в / hello /, hello () не принимает аргументов (1 дано) - PullRequest
2 голосов
/ 25 января 2012

Я следую этому уроку для django: http://www.djangobook.com/en/2.0/chapter03/

И следил за каждым шагом к слову (я думаю). Однако даже самый простой Hello World не работает.

views.py

from django.http import HttpResponse

def hello(response):
    return HttpResponse("Hello world")

urls.py

from django.conf.urls.defaults import *
from myproject.views import hello

urlpatterns = patterns('',
    ('^hello/$', hello),
)

Сервер выдает эту ошибку:

TypeError at /hello/
hello() takes no arguments (1 given)

Это должно быть так просто, но просто не работает!

Ответы [ 2 ]

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

Пожалуйста, поймите, что для эффективности имеет смысл не автоматически перезагружать все файлы для каждого запроса. Даже проверка того, был ли изменен какой-либо из них, является довольно дорогостоящей операцией для производственных серверов. Иногда вы можете включить это для систем разработки (см. Руководство, если такая опция существует). Есть много веских причин, чтобы не включать автоматическую перезагрузку по умолчанию. В частности, слишком много людей в конечном итоге включат его в своих производственных системах и будут жаловаться на производительность ...

Другая причина заключается в том, что часто промежуточные состояния будут несовместимыми, в частности, когда изменения затрагивают более одного файла. В этом случае автоматическая перезагрузка, скорее всего, вызовет ошибку, которой можно было избежать, завершив редактирование, а затем перезагрузив. (Тем не менее, это не рекомендуется для производственных систем для редактирования файлов в режиме онлайн. Но, скажем, процесс синхронизации запущен; вы не хотите, чтобы ваш сервер перезагружался, пока он все еще синхронизируется.)

В некоторых ситуациях такие приемы, как inotify в linux, могут использоваться для того, чтобы операционная система уведомляла приложение об изменениях файлов. Я полагаю, что скрипт manage.py сделает что-то вроде этого.

0 голосов
/ 03 августа 2013

Когда вы получаете TypeError в вашей функции представления, функция представления имеет несоответствие аргументов.

  1. Проверьте, принимает ли требуемый request свой первый аргумент.
  2. Убедитесь, что все аргументы ключевых слов из urlpatterns находятся на месте.

Примеры:

url(r'^user/(?name[\w\-]+)/$', 'user')

def user(request, name):
    #Your logic
...