Django1.7在服务器启动时转储所有print语句,但在应用程序运行时没有转储任何语句

2024-05-15 01:37:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难弄清楚这里出了什么问题。。我正试图为我的django项目设置日志记录,但是我一启动./manage.py runserver,就会收到所有的调试消息。当我浏览网站时什么也没发生。你知道吗

我试图通过在一个非常简单的应用程序中设置来隔离日志记录问题。同样的问题。你知道吗

所以我也尝试了非常基本的print语句,我看到了相同的行为。。。你知道吗

这是我的views.py

from django.shortcuts import render
from django.views.generic import ListView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy

from architects.models import Architect

# Create your views here.
class ArchitectList(ListView):
    print('architect list')
    model = Architect
    template_name = 'backend/architects.html'

class ArchitectCreate(CreateView):
    print('create architect view')
    model = Architect
    template_name = 'backend/architect_form.html'
    success_url = reverse_lazy('backend:architects')
    fields = ['name']

class ArchitectUpdate(UpdateView):
    print('update architect view')
    model = Architect
    template_name = 'backend/architect_form.html'
    success_url = reverse_lazy('backend:architects')
    fields = ['name']

class ArchitectDelete(DeleteView):
    print('delete architect view')
    model = Architect
    template_name = 'backend/architect_confirm_delete.html'
    success_url = reverse_lazy('backend:architects')

这就是我在启动django dev服务器时看到的:

$ ./manage.py runserver
architect list
create architect view
update architect view
delete architect view
architect list
create architect view
update architect view
delete architect view
Performing system checks...

System check identified no issues (0 silenced).
October 08, 2014 - 13:49:03
Django version 1.7, using settings 'turigo.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

所有的print语句都转储在这里。。。好 啊。但是现在当我浏览网站到不同的视图时,什么都没有发生。。。你知道吗

[08/Oct/2014 13:51:40] "GET /admin/architects/add/ HTTP/1.1" 200 10643
[08/Oct/2014 13:51:43] "GET /admin/architects/ HTTP/1.1" 200 10956

你知道吗?谢谢


Tags: djangonamefromimportviewbackendmodellazy
1条回答
网友
1楼 · 发布于 2024-05-15 01:37:05

在Python中,在类级别定义的任何内容总是在第一次导入文件时执行。(这同样适用于像model = Architect这样的赋值和打印语句:赋值本身就是可执行语句)。你知道吗

正如parchment所建议的,您需要将这些语句移到Django调用视图时运行的方法中:因为您没有任何语句,所以您可以对basedispatch方法进行基本重写:

class ArchitectList(ListView)
    def dispatch(self, *args, **kwargs):
        print('in architect list')
        return super(ArchitectList, self).dispatch(*args, **kwargs)

相关问题 更多 >

    热门问题