Django视图在“shell”中有效,但导入到现有视图时无效

0 投票
2 回答
860 浏览
提问于 2025-04-17 07:16

目标:在页面加载后立即显示一个倒计时“时钟”。(顺便说一下,这个功能是为了在截止日期来临时提供一个视觉上响亮而清晰的提醒)

平台:Windows

countdown.py

import datetime, os, time
from Tkinter import *
from sys import exit


root = Tk()
time = ""
clock = Label(root, font=('times', 48, 'bold'), bg="cyan")
clock.pack(fill=BOTH, expand=1)


def getTime():
  -  finish = datetime.datetime(2011, 12, 4, 14, 45, 14, 281000)
  -  now = datetime.datetime.now()
  -  diff = finish - now
  -  minutes, seconds = divmod(diff.seconds, 60)
  -  hours, minutes = divmod(minutes, 60)
  -  string = "%d days %d hours %d minutes %d seconds" %    (diff.days,hours,minutes,seconds)
  - clock.config(text=string)
  - clock.after(200, getTime)

getTime()
root.mainloop()

urls.py:

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
-    url(r'^$', 'views.upn', name='site-homepage'),
-    (r'^ASSETS/(?P<path>.*)$', 'django.views.static.serve',
-       {'document_root': settings.MEDIA_ROOT}),
-    (r'^admin/', include(admin.site.urls)),
-    (r'^upn/$', 'views.upn'),
)

views.py:

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
from django.shortcuts import render_to_response
import urllib2
import countdown

def upn(request):
-return render_to_response("main.html")

main.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Main Page</title>

<link rel="stylesheet" type="text/css" href="/ASSETS/CSS/UPN.css"/>

</head>

<body>

<div class="maintext">
<div>


        <img class="MAINimg1" height="400" width="323" src="http://12345.jpg" border="0">

        <img class="MAINimg2" height="350" width="550" src="http://6789.jpg" border="0" border="0" >

    </div>



</body>

</html>

如果我在Windows命令提示符下运行“python manage.py shell”,然后“import countdown.py”,我就能得到想要的结果。

但是,如果我把它放到views.py里,并且“import countdown”,我就会遇到以下错误(追踪信息):

追踪信息:

File "D:\Python26\lib\site-packages\django\core\handlers\base.py" in get_response
  83.                     request.path_info)

    File "D:\Python26\lib\site-packages\django\core\urlresolvers.py" in resolve

  218.                     sub_match = pattern.resolve(new_path)

File "D:\Python26\lib\site-packages\django\core\urlresolvers.py" in resolve

  125.             return self.callback, args, kwargs

File "D:\Python26\lib\site-packages\django\core\urlresolvers.py" in _get_callback

  137.             raise ViewDoesNotExist, "Tried %s in module %s. Error was: %s" % 
(func_name, mod_name, str(e))


Exception Type: ViewDoesNotExist at /

Exception Value: Tried upn in module views. Error was: 'module' object has no attribute 'argv'

错误信息:

*文件 "D:\Python26\lib\site-packages\django\core\urlresolvers.py" 中的 _get_callback 137. raise ViewDoesNotExist, "尝试在模块 %s 中调用 %s。错误是:%s" % (func_name, mod_name, str(e)) *

这个错误信息看起来是关键,但我无法准确理解这个错误,以便进行必要的修正。

提前感谢你能提供的任何帮助。

2 个回答

0

如果你把代码中的 root.mainloop() 注释掉,错误就会消失,但这样并不能解决你想在桌面上显示窗口的问题。

要做到这一点,你需要在桌面上有一个程序(可能就是同一个程序 countdown.py),让它监听来自你网络服务的信号,然后再启动计时器。

如果你必须在请求时启动这段代码,你需要在应用程序的 wsgi 处理器中进行,这里会有传统的 argc/argv;不过我强烈不建议这样做,建议使用监听/查询的方法。

0

问题似乎出在你的网址配置上,它找不到完整的视图。

撰写回答