Что не так с моим 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')

Проблема была в том, что я забыл включить запрос в обратный рендер.

Другие вопросы по тегам