Javascript string literals cannot contain a bare (i.e., unescaped newline).
When jinja2 interpolates the values of article[0].title into the template
you get a literal newline that confuses the javascript parser. See
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals

If you can guarantee that the value does not contain a single or double
quote just use the '%r'|format() trick to escape the newline and
carriage-return. But it would be safer to use a filter like the Flask
tosjon filter mentioned by Markus in his reply (which I just now realized
was a reference to Flask and not a Jinja2 feature). Alternatively, "import
json" into your python and use the json.dumps() function.


On Mon, Mar 24, 2014 at 10:42 PM, Zarey Chang <[email protected]> wrote:

> may be i was wrong,I know the reason:
> after format the article[0].title, the result contains invisible '\r\n'.
> if alert article[0].title which contains '\r\n', the alert will fail.
>
> WTF good debug skill '{{%r}}', thanks sharing.
>
>
> I will remove the '\r\n' this moment, it seems easy by googling way.
> or you have some magic skill to replace the invisiable '\r\n' with '<br
> \>'?
>
> thanks very much.
>
>
>
>
> 2014-03-25 11:54 GMT+08:00 Zarey Chang <[email protected]>:
>
> Dont care that, article is array of instance of 'articel',so article[0] is
>> the firest instance of article.(what bad i mistake,so sorry).
>> ---
>> tojson also cant work with me, the same error with you getting. so, give
>> up this solution.
>> ---
>>
>> Now i found that the code below really can't work:
>> alert("&lt;p&gt;mysomesting&lt;/p&gt;");   or
>> alert("<p>mysomesting</p>");
>> this code work fine:
>> alert("mysomestring");
>>
>> I think this may be the real reason for the problem.
>>
>>
>>
>>
>> 2014-03-25 11:31 GMT+08:00 Kurtis Rader <[email protected]>:
>>
>> Your original problem statement was
>>>
>>> <script type="text/javascript">
>>>       alert({{article.title}});
>>> </script>
>>>
>>>
>>> You now say that "article" is a dictionary like object with a member
>>> named "0" that has a "title" attribute or member. Those things are not
>>> equivalent.
>>>
>>> You cannot use "{{ article.title }}" as a synonym for "{{
>>> article[0].title }}" unless your "article" object has overrides for the
>>> normal double-underscore methods (which is very unlikely).
>>>
>>>
>>> On Mon, Mar 24, 2014 at 7:59 PM, Zarey Chang <[email protected]> wrote:
>>>
>>>> @Kurtis Rader
>>>>
>>>> i'm sure the non-buildin type 'article' instance have 'title' attribute.The
>>>> 'article' is dict like, so I always use article[0].title instead.
>>>> after format 'article[0]', information shown as below:
>>>> ---
>>>> <!--Article(key=Key(&#39;Article&#39;, 5905064635924480),
>>>> title=u&#39;mytitlestring tag&#39;, type=u&#39;Translate&#39;)-->
>>>> ---(use ' instead)
>>>> <!--Article(key=Key('Article', 5905064635924480),
>>>> title=u'mysomestring', type=u'Translate')-->
>>>> ---
>>>>
>>>> if i'm sure article[0] contains title property, as:article[0].title
>>>> print out 'mysomestring'.
>>>> For the non-buildin type, how to alert article[0].title in javascript?
>>>>
>>>>
>>>> @Markus Unterwaditzer
>>>>
>>>> Did you say that I must use json to dumping the non-buildin type for
>>>> jinja2?
>>>> if it is, I must redirect my focus to json way.
>>>> (   but i think jinja2 could process alert("{{article[0].title}}"); in
>>>> some other way.  )
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> 2014-03-24 23:25 GMT+08:00 Kurtis Rader <[email protected]>:
>>>>
>>>>> The expansion of {{article.title}} is done by the jinja2 template
>>>>> engine on the server before the javascript is executed on the client 
>>>>> (i.e.,
>>>>> the browser). So the fact you're using javascript to display the value is
>>>>> not relevant. Either GAE is affecting jinja2 behavior or your "article"
>>>>> object doesn't have a "title" attribute or member (if it's a dict like
>>>>> object) or the value isn't what you expect. Try embedding the following in
>>>>> your document:
>>>>>
>>>>> <!--
>>>>> {{'%r'|format(article)}}
>>>>> -->
>>>>>
>>>>>
>>>>> That will embed a python representation of the "article" object as a
>>>>> comment in the document. Then use your brower "view page source" command 
>>>>> to
>>>>> see what was embedded. For example, I did this for one of my objects and
>>>>> got this:
>>>>>
>>>>> <!--
>>>>> {&#39;last_changed_rfc3339&#39;: &#39;2014-03-24T15:04:01Z&#39;,
>>>>> &#39;last_changed_rfc822&#39;: &#39;Mon, 24 Mar 2014 15:04:01 GMT&#39;,
>>>>> ...
>>>>> -->
>>>>>
>>>>>
>>>>> Note that the &#39; is a single-quote, which if you make the
>>>>> substitution yields the more familiar:
>>>>>
>>>>> {'last_changed_rfc3339': '2014-03-24T15:04:01Z',
>>>>> 'last_changed_rfc822': 'Mon, 24 Mar 2014 15:04:01 GMT',
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Mar 24, 2014 at 7:31 AM, alex <[email protected]> wrote:
>>>>>
>>>>>> Hi guys,
>>>>>>
>>>>>> What i want like below:
>>>>>> ---
>>>>>> <script type="text/javascript">
>>>>>>       alert({{article.title}});
>>>>>> </script>
>>>>>> ---
>>>>>> this code block was writen in some.html using jinja2 template,
>>>>>> working by GAE.
>>>>>> it alert nothing, empty content on dialog.
>>>>>> if I take the code below instead,it work fine:(but need pass extra
>>>>>> variable article.title as "title")
>>>>>> ---
>>>>>> <script type="text/javascript">
>>>>>>       alert({{title}});
>>>>>> </script>
>>>>>> ---
>>>>>>
>>>>>> so 1. ,jinja/jinja2 could only pass int, bool, and so on(these
>>>>>> regular type), isn't it?
>>>>>> 2. if I want pass the instance "article", do I must dump it by json?
>>>>>> 3. Is any other way for code like article.title that passing to
>>>>>> javascript?
>>>>>> (some times i think this problem may be less relate with javascript.)
>>>>>>
>>>>>> thx,
>>>>>>
>>>>>>  --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "pocoo-libs" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>>
>>>>>> To post to this group, send email to [email protected].
>>>>>> Visit this group at http://groups.google.com/group/pocoo-libs.
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Kurtis Rader
>>>>> Caretaker of the exceptional canines Junior and Hank
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to a topic in the
>>>>> Google Groups "pocoo-libs" group.
>>>>> To unsubscribe from this topic, visit
>>>>> https://groups.google.com/d/topic/pocoo-libs/Hfu3r1ZOWuw/unsubscribe.
>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>> [email protected].
>>>>>
>>>>> To post to this group, send email to [email protected].
>>>>> Visit this group at http://groups.google.com/group/pocoo-libs.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Zarey C.Y. Chang
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "pocoo-libs" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at http://groups.google.com/group/pocoo-libs.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>
>>> --
>>> Kurtis Rader
>>> Caretaker of the exceptional canines Junior and Hank
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "pocoo-libs" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/pocoo-libs/Hfu3r1ZOWuw/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/pocoo-libs.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> --
>> Zarey C.Y. Chang
>>
>
>
>
> --
> Zarey C.Y. Chang
>
> --
> You received this message because you are subscribed to the Google Groups
> "pocoo-libs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/pocoo-libs.
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Kurtis Rader
Caretaker of the exceptional canines Junior and Hank

-- 
You received this message because you are subscribed to the Google Groups 
"pocoo-libs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/pocoo-libs.
For more options, visit https://groups.google.com/d/optout.

Reply via email to