Включая файлы JavaScript с шаблонами - PullRequest
0 голосов
/ 30 ноября 2010

Я использую AppEngine с фреймворком webapp (python). В моем скрипте я динамически генерирую код JavaScript с помощью Django, например:

файл контроллера Python

template_values = {
    'page': '1',               
}

path = os.path.join(os.path.dirname(__file__), "../views/index.html")
self.response.out.write(template.render(path, template_values))

index.html file

<html>
<head>
...
<script>
{% if page %}
   alert("test");
{% endif %}
</script>
</head>
<body>

...
</body>
</html>

Теперь вместо использования встроенных тегов <script> я хотел бы использовать теги <link> со ссылкой на файл JS, содержащий скрипт. Тем не менее, я не могу понять, что могу сделать это с помощью движка шаблонов. Если я включу файл JS (динамически), ему каким-то образом нужно будет знать значение «страницы», но «страница» известна только в области index.html.

Есть идеи?

Спасибо

Joel

Ответы [ 2 ]

0 голосов
/ 02 декабря 2010

Если вы хотите динамически сгенерировать код javascript в своем html, вы можете написать код внутри кода python

page = 0
template_values = {
    'js_code': 'alert("test:'+str(page)+'")',               
}
path = os.path.join(os.path.dirname(__file__), "../views/index.html")
self.response.out.write(template.render(path, template_values))

в index.html

<script>
{{js_code}}
</script>

Если вы хотите сгенерироватьjs-файл динамически, вы можете попытаться сделать вид, что есть js-файл, и сгенерировать его содержимое.

class JSHandler(BaseHandler):
    def get(self):
        page= str(self.request.get("page"))
        js_code ='alert("page:'+page+'");'
        self.response.out.write(js_code)


def main():
 application = webapp.WSGIApplication([
  ('/code.js', JSHandler),
    ], debug=True)
 wsgiref.handlers.CGIHandler().run(application)

Затем вы можете написать этот код в html

<script type="text/javascript" src="/code.js?page={{page}}">></script>
0 голосов
/ 30 ноября 2010

Вы либо слишком усложняете простую ситуацию, либо четко не объяснили свою проблему.

Если вы хотите включить находящийся снаружи файл JavaScript, вы должны использовать тег <script>,not <link>.

Если у вас есть такой шаблон кода:

<html>
<head>
{% if page %}
   <script type="text/javascript" src="/js/foo.js"></script>
{% endif %}
</head>
...
</html>

и page не равно None, шаблон отобразит в браузере следующий HTML-код:

<html>
<head>
   <script type="text/javascript" src="/js/foo.js"></script>
</head>
...
</html>

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

...