如何通过点符号访问数据
How to access data via dot-notation
目标:从 assessment_obj
拉取 video_id
,分配给变量
数据库类型:SQLAlchemy
模型:Assessment
持有 video_id
多对一关系(多个评估可以使用视频)
1.)我正在尝试使用dot.notation
从评估2.)中提取video_id
,以便我可以使用retrieve
方法提取视频信息(例如 url
)。
用途:视频 url
将用于通过 JINJA2
模板/HTML
代码进入视频播放器 src
。 (如果我使用的行话不正确,我深表歉意,因为我是新手,正在努力更好地理解这些概念。)
我试图遵循 OOP
dot.notation
tutorial,但不确定如何从 table 中提取数据并分配给变量而不意外重新分配变量。
views.py
表单视图配置。
@view_config(route_name='save_assessment_result', renderer='templates/completedpage.jinja2')
def save_assessment_result(request):
with transaction.manager:
assessment_id = int(request.params['assessment_id'])
assessment_obj = api.retrieve_assessment(assessment_id) # the assessment
assessment_obj.video_id = video # this right?
thevid = api.retrieve_video(video) #retrieves the video via ID
template_video = int(request.params['video'])
# how do I get the retrieved video 'thevid' into the template?
# more code
transaction.commit()
return HTTPCreated()
模板: templates/assessment_form.jinja2
<div class="embed-responsive embed-responsive-16by9">
<iframe width="640" height="360" class="embed-responsive-item" allowfullscreen name='video' src="{{ url }}"></iframe>
</div>
新:Return assessment_obj
。新 View_Config.
注: 'videoname': video.videoname, 'length': video.length, 'url': video.url
@view_config(route_name='assessment', request_method='GET', renderer='templates/assessment_form.jinja2')
def assessment_form_view(request):
with transaction.manager:
assessment_id = int(request.matchdict['id'])
assessment = api.retrieve_assessment(assessment_id)
if not assessment:
raise HTTPNotFound()
video_id = int(request.matchdict['id']) # <--- this gives the assessmnet_id and not the video
video = api.retrieve_video(video_id)
return {'assessment_id': assessment_id, 'assessment_name': assessment.name, 'assessment_text': assessment.text, 'user_id': assessment.user_id, 'video_id':assessment.video_id, 'categories': ','.join([str(i) for i in assessment.categories]), 'video_id':video_id, 'videoname': video.videoname, 'length': video.length, 'url': video.url}
在行 assessment_obj.video_id = video
- video
变量来自哪里?
看到您正在尝试 "pull the data from a table and assign to a variable" 我想知道您是否真的尝试将 assessment_obj.video_id
分配给一个名为 video
的变量。在这种情况下,它应该是另一种方式:
video = assessment_obj.video_id
然后你的代码几乎开始有意义了。要将数据传递给模板,您只需 return 来自视图函数的字典:
@view_config(route_name='save_assessment_result', renderer='templates/assessment_form.jinja2')
def save_assessment_result(request):
with transaction.manager:
assessment_id = int(request.params['assessment_id'])
assessment_obj = api.retrieve_assessment(assessment_id) # the assessment
video_id = assessment_obj.video_id
thevid = api.retrieve_video(video_id)
template_video = int(request.params['video'])
return {
'thevid': thevid,
'template_video': template_video
}
然后在您的模板中您可以引用这些变量及其成员:
<iframe ... src="{{ thevid.url }}"></iframe>
根据 Sergey 的出色指导,我创建了一个新的视图配置来加载评估和视频。然后我返回了所需的值。
工作代码:
@view_config(route_name='assessment', request_method='GET', renderer='templates/assessment_form.jinja2')
def assessment_form_view(request):
with transaction.manager:
assessment_id = int(request.matchdict['id'])
assessment = api.retrieve_assessment(assessment_id)
if not assessment:
raise HTTPNotFound()
video = assessment.video_id
print 'test_video_id', video
video_obj = api.retrieve_video(video)
print 'test_video_obj', video_obj
return {'assessment_id': assessment_id, 'assessment_name': assessment.name, 'assessment_text': assessment.text, 'user_id': assessment.user_id, 'categories': ','.join([str(i) for i in assessment.categories]), 'url': video_obj.url, 'video_id':video_obj.video_id, 'videoname': video_obj.videoname, 'length': video_obj.length}
目标:从 assessment_obj
拉取 video_id
,分配给变量
数据库类型:SQLAlchemy
模型:Assessment
持有 video_id
多对一关系(多个评估可以使用视频)
1.)我正在尝试使用dot.notation
从评估2.)中提取video_id
,以便我可以使用retrieve
方法提取视频信息(例如 url
)。
用途:视频 url
将用于通过 JINJA2
模板/HTML
代码进入视频播放器 src
。 (如果我使用的行话不正确,我深表歉意,因为我是新手,正在努力更好地理解这些概念。)
我试图遵循 OOP
dot.notation
tutorial,但不确定如何从 table 中提取数据并分配给变量而不意外重新分配变量。
views.py
表单视图配置。
@view_config(route_name='save_assessment_result', renderer='templates/completedpage.jinja2')
def save_assessment_result(request):
with transaction.manager:
assessment_id = int(request.params['assessment_id'])
assessment_obj = api.retrieve_assessment(assessment_id) # the assessment
assessment_obj.video_id = video # this right?
thevid = api.retrieve_video(video) #retrieves the video via ID
template_video = int(request.params['video'])
# how do I get the retrieved video 'thevid' into the template?
# more code
transaction.commit()
return HTTPCreated()
模板: templates/assessment_form.jinja2
<div class="embed-responsive embed-responsive-16by9">
<iframe width="640" height="360" class="embed-responsive-item" allowfullscreen name='video' src="{{ url }}"></iframe>
</div>
新:Return assessment_obj
。新 View_Config.
注: 'videoname': video.videoname, 'length': video.length, 'url': video.url
@view_config(route_name='assessment', request_method='GET', renderer='templates/assessment_form.jinja2')
def assessment_form_view(request):
with transaction.manager:
assessment_id = int(request.matchdict['id'])
assessment = api.retrieve_assessment(assessment_id)
if not assessment:
raise HTTPNotFound()
video_id = int(request.matchdict['id']) # <--- this gives the assessmnet_id and not the video
video = api.retrieve_video(video_id)
return {'assessment_id': assessment_id, 'assessment_name': assessment.name, 'assessment_text': assessment.text, 'user_id': assessment.user_id, 'video_id':assessment.video_id, 'categories': ','.join([str(i) for i in assessment.categories]), 'video_id':video_id, 'videoname': video.videoname, 'length': video.length, 'url': video.url}
在行 assessment_obj.video_id = video
- video
变量来自哪里?
看到您正在尝试 "pull the data from a table and assign to a variable" 我想知道您是否真的尝试将 assessment_obj.video_id
分配给一个名为 video
的变量。在这种情况下,它应该是另一种方式:
video = assessment_obj.video_id
然后你的代码几乎开始有意义了。要将数据传递给模板,您只需 return 来自视图函数的字典:
@view_config(route_name='save_assessment_result', renderer='templates/assessment_form.jinja2')
def save_assessment_result(request):
with transaction.manager:
assessment_id = int(request.params['assessment_id'])
assessment_obj = api.retrieve_assessment(assessment_id) # the assessment
video_id = assessment_obj.video_id
thevid = api.retrieve_video(video_id)
template_video = int(request.params['video'])
return {
'thevid': thevid,
'template_video': template_video
}
然后在您的模板中您可以引用这些变量及其成员:
<iframe ... src="{{ thevid.url }}"></iframe>
根据 Sergey 的出色指导,我创建了一个新的视图配置来加载评估和视频。然后我返回了所需的值。
工作代码:
@view_config(route_name='assessment', request_method='GET', renderer='templates/assessment_form.jinja2')
def assessment_form_view(request):
with transaction.manager:
assessment_id = int(request.matchdict['id'])
assessment = api.retrieve_assessment(assessment_id)
if not assessment:
raise HTTPNotFound()
video = assessment.video_id
print 'test_video_id', video
video_obj = api.retrieve_video(video)
print 'test_video_obj', video_obj
return {'assessment_id': assessment_id, 'assessment_name': assessment.name, 'assessment_text': assessment.text, 'user_id': assessment.user_id, 'categories': ','.join([str(i) for i in assessment.categories]), 'url': video_obj.url, 'video_id':video_obj.video_id, 'videoname': video_obj.videoname, 'length': video_obj.length}