Django / Python make newline with '\n' - python

I'm quite new to using Django, so please be gentle, if this is a stupid question.
I'm trying to play with some stock-information in Python/Django. I'm getting the stock-rates from Yahoo Finance (with urllib). Whenever I get some stock-information, then I will get it like this (yep, it's one long string):
[b'Date,Open,High,Low,Close,Volume,Adj Close\n2014-12-01,26.16,26.22,25.85,26.02,48967100,25.54\n2014-11-28,26.80,26.90,26.44,26.49,31185200,26.00\n2014-11-26,26.89,26.97,26.78,26.87,19289700,26.38\n2014-11-25,27.01,27.03,26.84,26.86,28028000,26.37\n']
I then send it to a template with Django, using
to_be_returned = RequestContext(request, [[DICTIONARY_WITH_VARIABLE]])
and then
return HttpResponse(template.render(to_be_returned)
Is there a way, to get Django to beautify the long string for me? So I don't have to manipulate the string and replace all \n with <br />, in order for me to be able to read it easier? And what does the [b' ... '] mean (that contains the entire result?
Thanks for your assistance.

Use the linebreaksbr template filter:
{{ my_string_with_n|linebreaksbr }}
b'...' is a python3 byte string literal.

You do not attached a template.
Wrap out tag with
<pre></pre>

You can add html tag to the strings that you write in the response
For example :
response2.write('</br></br>List of Courses : ')

Related

Hubspot - filter to convert text to slug format using HubL

I am developing a template for a client in Hubspot's COS and I am struggling to find a HubL filter that will convert a text/string into a slug format.
For example, I want to be able to convert This Text into this-text. My goal is to use this feature to dynamically assign a css class based on a module text field.
I am looking for an equivalent feature to WordPress' sanitize_title() function.
HubL is based on Python. I am not sure what native Python features work in HubL, but I would be open to that approach as well.
If anyone has accomplished this and has some insight it would be much appreciated.
Thanks!
{% set var = "This Text" %}
{{ var|lower|replace(' ','-') }}
There's a space between the quotation marks in replace's first argument.

Using links with babel in Jinja2

Currently I'm using Flask and Jinja2 in combination with Babel. So far everything is working great.
The only problem I'm facing is when using links in a translated text. Let's say we have the following in HTML:
<p>You can change this in your settings.</p>
How would I use this in combination with babel?
I had been thinking of the following code, but this gives issues when the order of words is not the same in the translated language.
<p>{{ _("You can change this in your "){{ _("settings").</p>
Another idea was to put the entire HTML into the string to be translated but then I cannot use string escaping anymore.
What is the preferred way to do this?
I was looking for a solution to this and came across this excellent page.
You can add links by using the string substitution that is available for jinja2 variables. Here is an example:
{{ _("You can change this in your %(open)ssettings%(close)s.", open='' % user_id, close='')|safe }}
Your .po file will then have an entry like this:
msgid "You can change this in your %(open)ssettings%(close)s."
msgstr ""

Jinja 2 safe keyword

I have a little problem understanding what an expression like {{ something.render() | safe }} does .
From what I have seen, without the safe keyword it outputs the entire html document, not just the true content.
What I would like to know, is what it actually does, how it functions .
The safe filter explicitly marks a string as "safe", i.e., it should not be automatically-escaped if auto-escaping is enabled.
The documentation on this filter is here.
See the section on manual escaping to see which characters qualify for escaping.
Normally text is HTML-escaped (so <b> would be written out as <b>, which would render as <b>).
When you put |safe after something, you're telling the template engine that you have already escaped the text yourself, i.e. "it's safe to render this directly". So it will not do that encoding for you.
For more information: http://jinja.pocoo.org/docs/templates/#html-escaping
For anyone coming here looking to use the safe filter programmatically: wrap it in a markupsafe.Markup class, on which Jinja2 depends on.
Expanding on #data's answer, here's an example of using markupsafe.Markup:
import markupsafe
vals = {}
vals["name"] = markupsafe.Markup("<b>Duck</b>, Donald")
html = template.render(vals)
The resulting HTML will show Donald's last name in bold wherever the template contains {{name}}.
You can go this way
post.body is the variable that is getting the data from the database or any file.
{{ post.body | safe }}
I hope you will get it.

Django and wrap lines problem

I've a problem from many years.
The problem is a long text not separated by white spaces in a div. No wrap is applied and it breaks all layout.
How can I fix in django in a good way?
This is what I see:
As I understand the question it is HTML-side problem, not django-side. For HTML solution look How to word wrap text in HTML?. If you still want to wrap text in python code, textwrap.wrap will help you.
Also there is convenient template tag for this: wordwrap. It uses django.utils.text.wrap function which seems more suitable for using in Django projects.
This was bugging me as the built-in word-wrap template tag should have just worked. Instead use this...
{{ value|wordwrap:50|linebreaksbr }}
or
{{ value|wordwrap:50|linebreaks }}
depending if you want <br> or <br> and <p> tags
I don't know if it helps, but an approach could be creating a new filter based on truncatewords filter.
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#truncatewords
Code looks very simple:
def truncate_filter(value, maxlen):
if len(value) <= maxlen:
return value
return value[:maxlen-2] + '..'
Another ideia is using: {{ username|stringformat:".10s" }} to truncate in 10 characters.
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#stringformat

Including HTML variable in Django template without escaping

I have html encoded text which reads like this:
RT #freuter...
I want this displayed as html but I am not sure if there is a filter which i can apply to this text to convert the html-encoded text back to html ...
can someone help?
As Daniel says, use the {{ tweet|safe }} filter in the html, or mark it safe from the views.
Use django.template.mark_safe()
Try the |safe filter if you want to render all HTML.
See: How do I perform HTML decoding/encoding using Python/Django?
I think this answers your querstion.

Categories