Что не так с моим urls.py в этом примере?
Я только что установил userena, и этот пример работал из учебника, но как только я добавил одну строку в URLS.py, я получаю сообщение об ошибке. В приведенном ниже примере я добавил строку, отображающую домашнюю функцию из views.py
Теперь проблема, с которой я сталкиваюсь, заключается в том, что когда я перехожу к 127.0.0.1/8000, я получаю TypeError: строка не вызывается, но странным образом, если я перехожу к accounts/signup или accounts/signin, я получаю шаблон, который должно появиться, если я пойду к 127.0.0.1/8000.
from django.conf import settings
from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.views.generic import TemplateView
from accounts import views
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r"^$", 'home'),
url(r'^admin/', include(admin.site.urls)),
(r'^accounts/', include('userena.urls')),
)
Вот мои аккаунты /views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect
def home(request):
return render('homepage.html')
3 ответа
Вам нужно удалить кавычки в URL и импортировать это представление
from accounts.views import home
urlpatterns = patterns('',
url(r"^$", home),
url(r'^admin/', include(admin.site.urls)),
(r'^accounts/', include('userena.urls')),
)
Вы можете использовать строки в url(), но вы должны использовать формат 'app.views.viewname'
urlpatterns = patterns('',
url(r"^$", 'accounts.views.home'),
url(r'^admin/', include(admin.site.urls)),
(r'^accounts/', include('userena.urls')),
)
Или назовите модуль в первом аргументе как строку для pattern ()
urlpatterns = patterns('accounts.views',
url(r"^$", 'home'),
url(r'^admin/', include(admin.site.urls)),
(r'^accounts/', include('userena.urls')),
)
Правильный ответ таков: render
вызывается неправильно. На самом деле, файл views.py вызовет ошибку SyntaxError, но мы позволим этому скользить:)
# views.py
from django.shortcuts import render
def home(request):
return render(request, 'homepage.html')
Проблема была в том, что я забыл включить запрос в обратный рендер.