Представление Django работает в «оболочке», но не при импорте в существующее представление - PullRequest
0 голосов
/ 29 ноября 2011

Цель: отображать «часы» обратного отсчета сразу после загрузки страницы. (FWIW, он предназначен для создания визуально громкого и четкого напоминания о приближающемся сроке)

Платформа: 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>

Если я запускаю "python manage.py shell" в командной строке Windows, тогда "import countdown.py" , я получаю желаемый результат.

Однако, если я включу его в views.py и "import countdown" , я получу следующее (traceback):

Traceback:

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. повысить ViewDoesNotExist, «Попытка% s в модуле% s. Ошибка:% s»% (имя_функции, имя_модуля, str (e)) *

кажется ключевым, но я не могу интерпретировать эту ошибку достаточно точно, чтобы внести необходимые исправления.

Заранее благодарим за любую информацию, которую вы можете предложить.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Если вы закомментируете root.mainloop() из своего кода, ошибка исчезнет, ​​но это не решит вашу проблему с отображением окна на рабочем столе.

Для этого вам нужно иметьпрограмма на рабочем столе (возможно, та же самая программа countdown.py) прослушивает сигнал от вашего веб-сервиса и затем запускает таймер.

Если вы должны инициироватьэтот код по запросу, вам нужно будет сделать это где-нибудь в обработчике wsgi вашего приложения, где присутствует традиционный argc / argv;однако я настоятельно советую против этого и рекомендую подход слушателя / запроса.

0 голосов
/ 29 ноября 2011

Кажется, проблема в вашем urlconf, он не может найти весь вид.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...