#36244: safestring
-----------------------------+-----------------------------------------
     Reporter:  WeeDom       |                     Type:  Bug
       Status:  new          |                Component:  Uncategorized
      Version:  5.1          |                 Severity:  Normal
     Keywords:  safestring.  |             Triage Stage:  Unreviewed
    Has patch:  1            |      Needs documentation:  0
  Needs tests:  0            |  Patch needs improvement:  0
Easy pickings:  1            |                    UI/UX:  0
-----------------------------+-----------------------------------------
 Trying to render html with some basic inputs from a form. Testing with
 `manage.py test order` (order being my app, for the avoidance of doubt)

 order_email_to_vendor.html:
 {{{
 <!DOCTYPE html>
 <html>
 <head>
 <title>New Order</title>
 </head>
 <body>
     <p>Hi, AK,</p>
     <p>An order has been placed by {{ name }}. Details below:</p>
     <ul>
         <li>Name: {{ name }}</li>
         <li>Phone: {{ phone }}</li>
         <li>Email: {{ email }}</li>
         <li>Address: {{ address1 }}</li>
         <li>Comments: {{ comments }}</li>
     </ul>
     <p>Cheers,<br>Your friendly robot helper.</p>
 </body>
 </html>
 }}}
 my rendering code is this:
 {{{
 context = {
             'name': form.cleaned_data['name'],
             'phone': form.cleaned_data['phone'],
             'email': form.cleaned_data['email'],
             'address1': form.cleaned_data['address1'],
             'comments': form.cleaned_data['comments'],
         }
         # Add this line to inspect the context data
         vendor_email_html =
 render_to_string('order/order_email_to_vendor.html', context) + " testing
 by Dom"
         vendor_email_plain = strip_tags(vendor_email_html)

         customer_email_html =
 render_to_string('order/order_email_to_customer.html', context)
         customer_email_plain = strip_tags(customer_email_html)

         send_mail(
             'New Order',
             vendor_email_plain,
             settings.DEFAULT_FROM_EMAIL,
             [settings.CLIENT_EMAIL],
             fail_silently=False,
             html_message=vendor_email_html,
         )
 }}}

 email sends ok, but with an empty body.

 I set a trace in my code. After a LOT of s/n, I came across this. (note -
 `context` is generated by `manage.py test`, not me. And, anyway, `context`
 isn't the problem)

 {{{
 > /home/weedom/ak-cakes/venv/lib/python3.12/site-
 packages/django/template/base.py(1008)render()
 -> return SafeString("".join([node.render_annotated(context) for node in
 self]))
 (Pdb) context
 [{'True': True, 'False': False, 'None': None}, {'name': 'John Doe',
 'phone': '123456789', 'email': 'j...@example.com', 'address1': '123
 Street', 'comments': 'No nuts, please'}]
 (Pdb) self
 []
 (Pdb) SafeString("".join([node.render_annotated(context) for node in
 self]))
 ''   # empty string - template has disappeared.
 (Pdb) s
 --Return--
 > /home/weedom/ak-cakes/venv/lib/python3.12/site-
 packages/django/template/base.py(1008)render()->''
 -> return SafeString("".join([node.render_annotated(context) for node in
 self]))
 (Pdb) s
 }}}
 when it runs the template through SafeString, it returns an empty string.
 No error/exception.

 I've managed to work around this with `{% autoescape off %} ` but that
 feels *really* icky.

 Reporting as a bug because some sort of hint as to what happened would
 have saved me hours.

 Thanks
 WeeDom
-- 
Ticket URL: <https://code.djangoproject.com/ticket/36244>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/01070195817e5cd1-084bf1a5-c653-4a05-8e69-39cea34847b8-000000%40eu-central-1.amazonses.com.

Reply via email to