3D-модель Aframe не отображается в проекте Django с использованием статических URL - PullRequest
0 голосов
/ 19 октября 2018

Я хочу рендерить файлы .obj и .mtl в моем проекте Django, используя Aframe.То, чего я пытаюсь добиться, - это ввести какой-то пользовательский ввод, например «Apple», и затем на экране отобразится объект apple.Теперь, когда я жестко кодирую свой URL для статического файла, я получаю визуализированный объект.Но когда я передаю URL в словаре после добавления ввода в URL, объект не отображается.Запрос для например: Apple.Мой словарь имеет следующий формат:

dict = {0 :['education/Apple.obj','education/Apple.mtl']}

Мои views.py:

from django.http import HttpResponse
from django.template import loader


def viser(request):
    template = loader.get_template('education/viser.html')
    context = {}
    context[0] = []
    context[0].append("'education/Apple.obj'")
    context[0].append("'education/Apple.mtl'")
    query = request.POST.get('inputquery', False)
    if query:      
        template2 = loader.get_template('education/DOG.html')
        return HttpResponse(template2.render(context, request))
return HttpResponse(template.render(context, request))

Закодированный DOG.html:

<html>
<head>
    <script src="https://aframe.io/releases/0.8.0/aframe.min.js"></script>
</head>
<body>
<a-scene>
    {% load static %}        
    <a-entity obj-model="obj: {% static 'education/Apple.obj' %}; mtl: {% static 'education/Apple.mtl' %};" ></a-entity>         
  <a-entity position="0 70 150">
    <a-camera></a-camera>
  </a-entity>    
</a-scene>
</body>
</html>

Динамический DOG.html

<html>
<head>
    <script src="https://aframe.io/releases/0.8.0/aframe.min.js"></script>
</head>
<body>
<a-scene>
    <a-sky color="#6EBAA7"></a-sky>
    {% load static %}
    {% for classlabel, value in context.items %}
        <a-entity obj-model="obj: {% static value.0 %}; mtl: {% static value.1 %};" ></a-entity>
    {% endfor %}
    <a-camera position="0 0 0" look-controls wasd-controls="acceleration:1000">
        <a-cursor color="yellow"></a-cursor>
    </a-camera>
</a-scene>
</body>
</html>

Одна особенность, которую я заметил во время отладки, заключалась в том, что всякий раз, когда я пытался выполнить цикл for в жестко закодированном файле DOG.html, он не давал браузеру отображать объект, но когда я избавлялся от for иendfor теги, я получил визуализированный объект.Является ли цикл for причиной каких-либо проблем в программе?

Свойство DOG.html: не отображает объект

<a-scene>
    {% load static %} 
    {% for index, value in context.items %}
        <a-entity obj-model="obj: {% static 'education/Apple.obj' %}; mtl: {% static 'education/Apple.mtl' %};" ></a-entity>
    {% endfor %}
</a-scene>

Свойство DOG.html после удаления for и endfor: Отображает объект

<a-scene>
    {% load static %} 
    <a-entity obj-model="obj: {% static 'education/Apple.obj' %}; mtl: {% static 'education/Apple.mtl' %};" ></a-entity>
</a-scene>

1 Ответ

0 голосов
/ 19 октября 2018

Вы ошибаетесь в некоторых основах шаблонов Django.Прежде чем пытаться заставить работать свой код aframe или тег static, убедитесь, что вы можете правильно обращаться к переменным в своем словаре context.

Вы визуализируете шаблон с контекстом:

context = {0 :['education/Apple.obj','education/Apple.mtl']}

Не следует использовать 0 в качестве имени переменной контекста.Измените его на что-нибудь другое, например obj_list.

Из вашего кода выглядит так, как будто вы собираетесь иметь много тегов <a-entity>, поэтому вам действительно нужен список списков.

context = {}
context['obj_list'] = []
context['obj_list'].append(['education/Apple.obj', 'education/Apple.mtl'])

Это даст вам контекстный словарь, например:

context = {'obj_list' :[['education/Apple.obj','education/Apple.mtl']]}

Далее, вы не используете context в самом шаблоне, вы используете ключи контекстного словаря,В этом случае в вашем словаре есть один ключ obj_list, поэтому ваш цикл может выглядеть примерно так:

{% for item obj_list %}
    {{ item.0 }}
    {{ item.1 }}
{% endfor %}

Как только вы это заработаете, вы можете начать использовать переменные со статическим тегом и рамкой.

...