一旦上传到服务器,render() 调用中的 Django TypeError
Posted
技术标签:
【中文标题】一旦上传到服务器,render() 调用中的 Django TypeError【英文标题】:Django TypeError in render() call once uploaded to server 【发布时间】:2017-10-11 04:08:53 【问题描述】:我有一个网站,我正在更新到最新的 Django,一次发布一个点。现在我在 Django 1.9.13 和 Python 2.7.5 上,我的代码可以在我的本地开发机器上与 manage.py runserver
一起正常工作,但是当我将它运行到我的网络主机(WebFaction)时,它失败了错误:
TypeError at /init() 正好需要 3 个参数(给定 2 个)
这是回溯:
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/myuser/webapps/optical_test/cinedex/theoptical/views.py" in frontpage
38. return render(request, 'theoptical/frontpage.html', context)
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/shortcuts.py" in render
67. template_name, context, request=request, using=using)
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
96. template = get_template(template_name, using=using)
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/template/loader.py" in get_template
32. return engine.get_template(template_name, dirs)
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/template/backends/django.py" in get_template
40. return Template(self.engine.get_template(template_name, dirs), self)
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/template/engine.py" in get_template
190. template, origin = self.find_template(template_name, dirs)
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/template/engine.py" in find_template
153. for loader in self.template_loaders:
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/utils/functional.py" in __get__
33. res = instance.__dict__[self.name] = self.func(instance)
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/template/engine.py" in template_loaders
118. return self.get_template_loaders(self.loaders)
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/template/engine.py" in get_template_loaders
123. loader = self.find_template_loader(template_loader)
File "/home/myuser/.virtualenvs/optical_test/lib/python2.7/site-packages/django/template/engine.py" in find_template_loader
146. return loader_class(*args)
Exception Type: TypeError at /
Exception Value: __init__() takes exactly 3 arguments (2 given)
这是cinedex/theoptical/views.py
在frontpage
:
def frontpage(request):
context = 'title':"The Optical Test New Front Page"
# Don't return episodes with a pubdate in the future
now = timezone.now()
if Episode.objects.filter(pubDate__lt=now):
latest_episode = get_object_or_404(Episode.objects.filter(pubDate__lt=now).order_by('-pubDate')[:1])
context.update('latest_episode': latest_episode)
context.update(masterlinks())
return render(request, 'theoptical/frontpage.html', context)
对我应该在哪里查找错误有什么建议吗?让我知道提供更多信息是否对我有用。谢谢!
更新
这是我的settings.py
的模板设置
TEMPLATES = [
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
],
'OPTIONS':
'context_processors': [
# Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
# list if you haven't customized them:
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
],
'loaders': [
'django.template.loaders.cached.Loader',
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
],
'debug':True,
,
,
]
【问题讨论】:
可以是这个docs.djangoproject.com/en/1.11/ref/templates/upgrading 吗? 检查您是否在开发和生产服务器上运行相同版本的 Python 和 Django。 塞尔丘克,你知道吗——我不是。我以为我是,但 dev virtualenv 在 python 2.7.10 上。 Igonato,我不这么认为。我已经浏览过该页面几次,而且我的模板设置似乎还可以。以防万一,我会用我的 TEMPLATES 设置更新问题。 你从 django 的调试中得到回溯吗?loader_class
变量中有什么?
【参考方案1】:
查看您的模板设置似乎 django.template.loaders.cached.Loader
应该设置不同 (docs):
TEMPLATES = [
# ...
'OPTIONS':
'loaders': [
('django.template.loaders.cached.Loader', [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
]),
],
,
]
【讨论】:
就是这样。现在网站加载。哇!谢谢你。看起来它并没有影响开发runserver
上的东西,因为那里默认禁用缓存。
@bobtiki 完全正确。顺便说一句,它是在 1.11 中的 DEBUG = False 时自动添加的,因此您可以完全从您的设置中删除加载器
谢谢。一旦我到达 1.11,我会这样做。 :D【参考方案2】:
您的错误发生在这一行
latest_episode = get_object_or_404(Episode.objects.filter(pubDate__lt=now).order_by('-pubDate')[:1])
您缺少一个论点 - 请参阅docs。你应该这样做:
eps = get_object_or_404(Episode, pubDate__lt=now)
latest_episode = eps.order_by('-pubDate')
【讨论】:
很确定这是不正确的,OP的方式很好以上是关于一旦上传到服务器,render() 调用中的 Django TypeError的主要内容,如果未能解决你的问题,请参考以下文章
Python-Flask中的render_template不起作用
上传到服务器后,图像路径从 vuejs 项目中的 localhost 调用
有关使用node-postgres和render page的节点js中的回调的问题