2015-10-07 4 views
2

Цель: Вытащите video_id от assessment_obj, присвоить переменной
DB Тип: SQLAlchemy
Модель: Assessment держит video_id в многие-ко-одному (несколько оценок можно использовать видео)Как получить доступ к данным с помощью точечной нотации

1.) Я пытаюсь использовать dot.notation тянуть video_id от оценки 2.), так что я могу использовать метод retrieve тянуть видео информации (например, url).

Цель: видео url будет использоваться для входа в видеоплеер src через шаблон JINJA2/HTML. (прошу прощения, если я использую жаргон неправильно, как Я новичок, и я пытаюсь лучше понять концепции.)

Я пытался следовать OOPdot.notationtutorial, но не был уверен в том, как вытащить данные из таблицы и назначить переменную без случайного переназначения переменной.

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> 

NEW: Возвращение на 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} 

ответ

1

В строке assessment_obj.video_id = video - где же переменная video взялось?

Увидев, что вы пытаетесь «вытащить данные из таблицы и назначить переменную» Мне интересно, если вы на самом деле пытались назначить assessment_obj.video_id переменной, называемой video. В этом случае это должно быть по-другому:

video = assessment_obj.video_id 

Затем вы код почти начинает иметь смысл. Для того, чтобы передать данные в шаблон просто возвращает словарь из вашей функции зрения:

@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> 
+0

Это фантастика ... и спасибо за ловя мой разворот переменной. Хлоп. Я замечаю, что это предложение все еще не подтягивает видео. Никакой трассировки и ошибки. Я добавил атрибуты, доступные через 'evaluation_obj' выше. – thesayhey

+0

'{{thevid.url}}' должно быть '{{url}}' ... поэтому добавьте к возвращаемым значениям ... например. ''url': thevid.url,' но по какой-то причине не работает – thesayhey

+0

@thesayhey: я не вижу, как вы возвращаете словарь из функции, вместо этого вы возвращаете 'HTTPCreated()', что пользовательский объект Response. Если вы возвращаете ответ, ваш шаблон вообще не используется. Вам нужно вернуть словарь для вызываемого шаблона. – Sergey

0

Per Сергея я создал новая конфигурация представления, которая загружала оценку и видео. Затем я вернул необходимые значения.

Рабочий код:

@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} 
Смежные вопросы