Django render_to_string失败了 - 无法捕获错误?

时间:2014-06-12 16:12:55

标签: python django

这是另一个让我烦恼的人

以下代码在完成长时间运行的任务后作为管理命令运行

logger.debug('preparing email')

context = {
    'project': task.project,
    'site': Site.objects.get(pk=settings.SITE_ID),
    'task': task,
    'user': task.user,
}
subject = 'Custom Assay Design of #%s - "%s" has completed' % (
    project.pk, project.title)

logger.debug('email step 1')
try:
    content_txt = render_to_string(
        'analysis/email/analysis_complete.txt', context)
except:
    logger.debug('failed to render string')
    import traceback
    traceback.print_exc()

logger.debug('email step 2')

它没有开始那么多的调试或通用的尝试/除了它现在在哪里

如果我单步执行shell中的所有内容,它就能完美运行

如果我将content_txt AND content_html更改为字符串变量,那么事情就可以了

因为输出看起来像

2014-06-12 10:03:24,831 primer_search_finished line:28   DEBUG    Callback made to process PrimerTask 237
2014-06-12 10:03:24,831 primer_search_finished line:30   DEBUG    Trying to get task 237
2014-06-12 10:03:24,878 primer_search_finished line:54   DEBUG    Task 237 for project 280:Test -- 2014-04-11 marked complete
2014-06-12 10:03:24,889 primer_search_finished line:60   DEBUG    preparing email
2014-06-12 10:03:24,897 primer_search_finished line:71   DEBUG    email step 1

每次尝试运行render_to_string时都会中断

python版本 - 2.7.5 django版本 - 1.5.6

任何想法?

1 个答案:

答案 0 :(得分:0)

当您运行脚本与从命令行测试运行时,您的基本目录看起来不一样。

我建议:

...
try:
    content_txt = render_to_string(
        '%s/analysis/email/analysis_complete.txt' % PROJECT_ROOT, context)
....

这将确保您实际上正在查找文件的正确位置。

在此之前,您必须定义PROJECT_ROOT。 (您可以查看使用相对于此文件的位置__file__。)