错误:我试图将我的 oTree 实验游戏放在开发服务器中,出现此错误。我现在不知道,这意味着什么,因为我猜它与我的代码无关?
请求方法:GET 请求网址:http://localhost:8000/p/wypb8dnj/Intro/Understanding1/3/
Django 版本:1.11.2 Python 版本:3.6.3 已安装的应用程序:
['otree',
'django.contrib.auth',
'django.forms',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'channels',
'huey.contrib.djhuey',
'idmap',
'raven.contrib.django.raven_compat',
'radiogrid',
'Intro']
Installed Middleware:
['otree.middleware.CheckDBMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware']
Template error:
In template c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\otree\templates\otree\Base.html, error at line 0
13 1 : {% load staticfiles %}
2 : {% load i18n %}
3 : {% load otree %}
4 :
5 : <!DOCTYPE html>
6 : <html>
7 : <head>
8 : <title>{% block head_title %}{% block title %}
9 : {% endblock %}{% endblock %}</title>
10 :
Traceback:
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\otree\views\abstract.py" in dispatch
236. response.render()
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\response.py" in render
107. self.content = self.rendered_content
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\response.py" in rendered_content
84. content = template.render(context, self._request)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\backends\django.py" in render
66. return self.template.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render
207. return self._render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in _render
199. return self.nodelist.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render
990. bit = node.render_annotated(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render_annotated
957. return self.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\loader_tags.py" in render
177. return compiled_parent._render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in _render
199. return self.nodelist.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render
990. bit = node.render_annotated(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render_annotated
957. return self.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\loader_tags.py" in render
177. return compiled_parent._render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in _render
199. return self.nodelist.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render
990. bit = node.render_annotated(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render_annotated
957. return self.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\loader_tags.py" in render
177. return compiled_parent._render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in _render
199. return self.nodelist.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render
990. bit = node.render_annotated(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render_annotated
957. return self.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\loader_tags.py" in render
72. result = block.nodelist.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render
990. bit = node.render_annotated(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render_annotated
957. return self.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\loader_tags.py" in render
72. result = block.nodelist.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render
990. bit = node.render_annotated(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\base.py" in render_annotated
957. return self.render(context)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\loader_tags.py" in render
204. template = context.template.engine.get_template(template_name)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\engine.py" in get_template
162. template, origin = self.find_template(template_name)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\engine.py" in find_template
136. name, template_dirs=dirs, skip=skip,
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\loaders\base.py" in get_template
38. contents = self.get_contents(origin)
File "c:\users\welschre\appdata\local\programs\python\python36\lib\site-packages\django\template\loaders\filesystem.py" in get_contents
28. with io.open(origin.name, encoding=self.engine.file_charset) as fp:
Exception Type: PermissionError at /p/wypb8dnj/Intro/Understanding1/3/
Exception Value: [Errno 13] Permission denied: 'C:\\Users\\WelschRe\\experiment\\_templates'
我的设置.py:
from os import environ
import os
import dj_database_url
import otree.settings
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# the environment variable OTREE_PRODUCTION controls whether Django runs in
# DEBUG mode. If OTREE_PRODUCTION==1, then DEBUG=False
if environ.get('OTREE_PRODUCTION') not in {None, '', '0'}:
DEBUG = False
else:
DEBUG = True
# don't share this with anybody.
#SECRET_KEY = 'a!1g82ccjgfst65w=-__$0-wrc0)x93=@ovs(f)y1&+(n*7fx2'
SECRET_KEY = '2g942lbviezc5hc=zff2*ptc^zn$91@h$f&%%1t75%_2b#s_vh'
DATABASES = {
'default': dj_database_url.config(
# Rather than hardcoding the DB parameters here,
# it's recommended to set the DATABASE_URL environment variable.
# This will allow you to use SQLite locally, and postgres/mysql
# on the server
# Examples:
# export DATABASE_URL=postgres://USER:PASSWORD@HOST:PORT/NAME
# export DATABASE_URL=mysql://USER:PASSWORD@HOST:PORT/NAME
# fall back to SQLite if the DATABASE_URL env var is missing
default='sqlite:///' + os.path.join(BASE_DIR, 'db.sqlite3')
)
}
# AUTH_LEVEL:
# this setting controls which parts of your site are freely accessible,
# and which are password protected:
# - If it's not set (the default), then the whole site is freely accessible.
# - If you are launching a study and want visitors to only be able to
# play your app if you provided them with a start link, set it to STUDY.
# - If you would like to put your site online in public demo mode where
# anybody can play a demo version of your game, but not access the rest
# of the admin interface, set it to DEMO.
# for flexibility, you can set it in the environment variable OTREE_AUTH_LEVEL
AUTH_LEVEL = environ.get('OTREE_AUTH_LEVEL')
ADMIN_USERNAME = 'admin'
# for security, best to set admin password in an environment variable
ADMIN_PASSWORD = environ.get('OTREE_ADMIN_PASSWORD')
# setting for integration with AWS Mturk
AWS_ACCESS_KEY_ID = environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = environ.get('AWS_SECRET_ACCESS_KEY')
# e.g. EUR, CAD, GBP, CHF, CNY, JPY
REAL_WORLD_CURRENCY_CODE = 'USD'
USE_POINTS = True
# e.g. en, de, fr, it, ja, zh-hans
# see: https://docs.djangoproject.com/en/1.9/topics/i18n/#term-language-code
LANGUAGE_CODE = 'en'
# if an app is included in SESSION_CONFIGS, you don't need to list it here
INSTALLED_APPS = ['otree','radiogrid']
SENTRY_DSN = 'http://b1e2f44765e24ec0bde684ffa5301308:b0c9994fc8074b2ea09cfa71e53bcbf5@sentry.otree.org/276'
DEMO_PAGE_INTRO_HTML = """
<ul>
<li>
<a href="https://github.com/oTree-org/otree" target="_blank">
oTree on GitHub
</a>.
</li>
<li>
<a href="http://www.otree.org/" target="_blank">
oTree homepage
</a>.
</li>
</ul>
<p>
Here are various games implemented with oTree. These games are all open
source, and you can modify them as you wish.
</p>
"""
ROOMS = [
{
'name': 'econ101',
'display_name': 'Econ 101 class',
'participant_label_file': '_rooms/econ101.txt',
},
{
'name': 'live_demo',
'display_name': 'Room for live demo (no participant labels)',
},
]
mturk_hit_settings = {
'keywords': ['bonus', 'study'],
'title': 'Title for your experiment',
'description': 'Description for your experiment',
'frame_height': 500,
'preview_template': 'global/MTurkPreview.html',
'minutes_allotted_per_assignment': 60,
'expiration_hours': 7*24, # 7 days
#'grant_qualification_id': 'YOUR_QUALIFICATION_ID_HERE',# to prevent retakes
'qualification_requirements': []
}
# if you set a property in SESSION_CONFIG_DEFAULTS, it will be inherited by all configs
# in SESSION_CONFIGS, except those that explicitly override it.
# the session config can be accessed from methods in your apps as self.session.config,
# e.g. self.session.config['participation_fee']
SESSION_CONFIG_DEFAULTS = {
'real_world_currency_per_point': 1.00,
'participation_fee': 0.00,
'doc': "",
'mturk_hit_settings': mturk_hit_settings,
}
SESSION_CONFIGS = [
{
'name': 'Real',
'display_name': 'Decision Game',
'num_demo_participants': 2,
'app_sequence':['Intro'],
},
# {
# 'name': 'postquestionnaire',
# 'display_name': 'Test-PostQuestionnaire',
# 'num_demo_participants': 1,
# 'app_sequence':['postquestionnaire'],
# },
# {
# 'name': 'RealTest',
# 'display_name': 'Test Game',
# 'num_demo_participants': 2,
# 'app_sequence':['Real'],
# },
# {
# 'name': 'AlternativeChart',
# 'display_name': 'ChartTest',
# 'num_demo_participants': 2,
# 'app_sequence':['Now'],
# },
]
# anything you put after the below line will override
# oTree's default settings. Use with caution.
otree.settings.augment_settings(globals())