The title might not be clear, but I don't know how else to put it..
In the Django documentation it's pretty clear how to mark a text block for translation .. Take this example:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Donec quam sem, sodales in fringilla nec, lacinia a lorem.
Vivamus vel molestie ante.
So far so good. You just either use the trans or blocktrans tag.
But now consider this:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Donec quam sem, sodales in fringilla nec, lacinia a lorem.
Vivamus vel molestie ante.
How should I deal with this ? Do I just wrap it in a block trans ?
Edit:
I think I've found out how it should be done ..
{% url some-view as some_view_url %}
{% blocktrans %}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Donec quam sem, sodales in fringilla nec, lacinia a lorem.
Vivamus vel molestie ante.
{% endblocktrans %}
I would definitely use blocktrans. Sometimes its not possible to split i18n html text into different fragments. Blocktrans has some powerfull features:
{% url path.to.view arg arg2 as the_url %}
{% blocktrans with object.title as title and author|title as author_t %}
{{author}}: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Donec quam sem, sodales in fringilla nec, lacinia a lorem.
{{title}} molestie ante.
{% endblocktrans %}
Have a look at:
url template tag
blocktrans template-tag
Related
I have to select only the characters contained from > to the last dot (not the first dot).
I tried this pattern
^>[a-zA-Z]+$
but something doesn't work. Can I get some help? Thank you.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat.
>Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat.
I made an example using javascript to have a working demo but since I had to use a strategy where the commonly used . (dot) should match also line breaks, in this case I was forced to use [\s\S] instead.
the regex ^>[\s\S]+\.\n expects to find a > at the beginning of the line followed by any character until the last dot found followed by a new line.
This demo feeds the regex match with the full text and returns just the middle part as you were expecting:
const subject = `
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat.
>Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat.`;
var re = /^>[\s\S]+\.\n/im;
var match = re.exec(subject);
if (match != null) {
result = match[0];
} else {
result = "";
}
console.log(result);
C# .Net Solution
(>[\s\S]*\.)
Or if you don't want to capture the > and . then you can use a positive look behind and positive look ahead.
To match all characters and whitespace in between we can use [\s\S]* This works by default in .Net due to aggressive matching
(?<=>)([\s\S]*)(?=\.)
Try this fiddle: https://dotnetfiddle.net/3ukM0X
public static void Main()
{
string content = #"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
"">""Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.";
var regex = new System.Text.RegularExpressions.Regex(#"(?<=>)([\s\S]*)(?=\.)");
Console.WriteLine(regex.Match(content));
}
Returns:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat
If there can not be any > chars in the paragraph, only at the start, then you can use:
^>[^>]*\.
^ Start of string
> Match literally
[^>]* Match optional chars other than >
\. backtrack to match the last occurrence of the dot
See a regex demo
If you want to allow the > char in the paragraph (but not at the start as that denotes the start of the paragraph) you can match all lines after it that do not start with <
^>.*(?:\r?\n(?!>).*)*\.
See another regex demo
I'm looking for a proper workaround for that bootstrap problem.
When we use the following css hack from some other stack overflow questions to make sure the modal doesn't go higher than the screen and at the same time having a vertical scrollbar for the body. This actually works just fine and is the desired behavior.
.modal-body {
max-height: calc(100vh - 210px);
overflow-y: auto;
}
the popover inside the modal-body pops under the header and/or footer. See the following fiddle for an example : https://jsfiddle.net/2qeo99k3/4/
or the code bellow. I didn't find any answers on this specific problem after searching or clicking questions that may already have my answer. Changing the popover z-index has no effect.
<style>
.modal-body {
max-height: calc(100vh - 210px);
overflow-y: auto;
}
</style>
<script type="text/javascript">
$(document).ready(function () {
$('[data-toggle="popover"]').popover();
});
</script>
<div style="padding:12px">
This example have a popover at the top and one at the bottom. Click them to see that the popup shows under the header or the footer of the modal when using the css for the modal-body
<br>
<br>
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalLong">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModalLong" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<a class="btn btn-primary" data-toggle="popover" data-html="true" data-placement="top" data-content="This is one line<br>This is another line<br>This is another line">Show bootstrap popover top</a>
<br><br>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis lobortis enim in eros tincidunt, non finibus velit rutrum. Donec ultricies arcu sed tellus vestibulum, ornare rutrum massa ultrices. Sed sem metus, mattis ut dolor ut, interdum mattis nisi. Suspendisse auctor libero sit amet faucibus iaculis. Curabitur in eros dictum, auctor nulla a, aliquet est. Aenean vitae aliquet sem. Curabitur in lobortis justo.
Nullam quis purus quis ex venenatis rutrum. Morbi mattis leo nisi, a vehicula risus venenatis egestas. Suspendisse gravida eu nisl mattis rutrum. In mi metus, hendrerit a velit eu, mollis facilisis lorem. Quisque est nibh, volutpat nec ante ac, dictum congue tortor. Maecenas dui magna, vulputate at nisi a, pretium hendrerit turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean maximus magna in erat hendrerit, non placerat lorem vestibulum. Suspendisse ut nulla at ante fermentum sollicitudin. Proin tincidunt tempus urna at imperdiet. Nullam eget urna justo. Quisque nec est ante.
Nullam auctor dictum metus, in congue sapien eleifend eget. Quisque facilisis tortor in lorem commodo, eget vulputate diam condimentum. Proin ultrices orci ut feugiat pellentesque. Proin vitae malesuada erat. Quisque lacinia odio accumsan, sollicitudin turpis vitae, efficitur libero. Quisque bibendum, nibh sit amet imperdiet efficitur, metus turpis pharetra dolor, quis hendrerit nisi arcu sed mauris. In quis felis tincidunt, blandit libero et, scelerisque quam. Ut in magna vestibulum, pellentesque neque eu, porta justo. Quisque id justo consequat, suscipit neque non, porta dui.
Suspendisse potenti. Curabitur convallis varius lacus a eleifend. Suspendisse et finibus neque. Vivamus efficitur, tortor at malesuada faucibus, sem ipsum scelerisque nisl, vitae imperdiet nunc ex at ex. Vivamus suscipit volutpat porta. Nunc nisl mauris, blandit in molestie in, sollicitudin id lacus. Cras tempor, tortor non placerat cursus, purus nunc fermentum felis, vitae cursus lorem nisi vel enim. Sed quis maximus elit. Suspendisse ullamcorper, nulla et gravida porta, mi lorem sollicitudin leo, id consectetur velit nunc non libero. Nullam nec felis vel lorem feugiat placerat. Donec id elit sed nibh volutpat faucibus sed iaculis purus. Suspendisse vulputate, nibh sed scelerisque porta, diam felis condimentum massa, a convallis nulla libero id erat. Phasellus vestibulum lectus imperdiet, porta nibh at, sagittis massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean fermentum tincidunt tortor, at lacinia urna gravida eget.
<br><br>
<a class="btn btn-primary" data-toggle="popover" data-html="true" data-placement="bottom" data-content="This is one line<br>This is another line<br>This is another line">Show bootstrap popover bottom</a>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
</div>
Wow it was fast. After searching even more I found this :
$('[data-toggle="popover"]').popover({ container: 'body' });
It solves the problem
I want to get a string like this:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tempor pulvinar enim! Nec aliquam massa faucibus sed?? Praesent nec consectetur sapien... Nulla dapibus rutrum turpis, ac porta erat posuere vel.
starting from string in all uppercase (or lowercase). For example:
LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT. DONEC TEMPOR PULVINAR ENIM! NEC ALIQUAM MASSA FAUCIBUS SED?? PRAESENT NEC CONSECTETUR SAPIEN... NULLA DAPIBUS RUTRUM TURPIS, AC PORTA ERAT POSUERE VEL.
How can I do?
Thank you!
Take your text and set it to a variable like this:
<cfset stringFixer = "LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT. DONEC TEMPOR PULVINAR ENIM! NEC ALIQUAM MASSA FAUCIBUS SED?? PRAESENT NEC CONSECTETUR SAPIEN... NULLA DAPIBUS RUTRUM TURPIS, AC PORTA ERAT POSUERE VEL.">
Lowercase everything:
<cfset stringFixer = lCase(stringFixer)>
Then you will need to match your string terminator with rematch like this:
<cfset stringFixerBreaker = reMatch('\w.+?[.?]+',stringFixer)>
reMatch() will break apart your string into smaller discrete sentence strings...Then you could do a replaceNoCase() with left search for the first char then do the same with your replacement string which will be the same but we will throw a uCase() on that first character to capitalize it.
<cfloop array="#stringFixerBreaker#" index="i">
<cfoutput>#replaceNoCase(i,left(i, 1 ),uCase(left(i, 1 )))# </cfoutput>
</cfloop>
Your output will look like this:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tempor pulvinar enim! nec aliquam massa faucibus sed?? Praesent nec consectetur sapien... Nulla dapibus rutrum turpis, ac porta erat posuere vel.
Edit: One last touch point to my answer.
If you need to rebuild the string do this:
<cfset str = "">
<cfloop array="#stringFixerBreaker#" index="i">
<cfset str = str & replaceNoCase(i,left(i, 1 ),uCase(left(i, 1 ))) & " ">
</cfloop>
Dump out the results to check everything is in order:
<cfdump var="#str#">
I would use CSS rather than ColdFusion to do this
<span style="text-transform : capitalize"><cfoutput>#lcase(mystring)#</cfoutput></span>
While I personally like #James A Mohler solution, you can also do this in CF using a simple regex.
function Initcap(text){
return rereplace(lcase(arguments.text), "(\b\w)", "\u\1", "all");
}
The best way is by using regex and ReReplace or ReReplaceNoCase.
<cfset mystring = "lorem ipsum"/>
#ReReplace(mystring ,"\b(\w)","\u\1","ALL")#
Here is my approach and it works in all cases except in a situation such as mc'donald's. I can get it to capitalize the "d" but then the "s" would also be capitalized. Mc'Donald'S.
<cfif ISDefined('mywds')>
<cfoutput>
#mywds#<br>
<cfset catz = #LCase(mywds)#>
<cfloop index="dogz" list="#catz#" delimiters=" ">
<cfif Len(dogz) is 1 >
#UCase(dogz)#
<cfelse>
#Left(UCase(dogz), 1 )##Right(LCase(dogz),
Len(dogz) - 1 )#
</cfif>
</cfloop>
</cfoutput>
</cfif>
<cfform action="" method="POST" target="_self">
<input type="text" name="mywds" size="50"><br>
<input type="submit" name="submit" value="Submit">
</cfform>
This is a working form so you can paste in a .cfm page and it will function.
The 2nd cfif statement:
<cfif Len(dogz) is 1 >
is so if someone enters text like "john t williams" the code will not throw an error on the single character "t".
I have a model ..
class News(models.Model):
date = models.DateField(auto_now=True)
title = models.CharField(max_length=100)
slug = models.CharField(max_length=100)
text = models.TextField()
def __unicode__(self):
return self.title
def get_absolute_url(self):
return ('view_item', None, {'slug': self.slug})
class Meta:
verbose_name_plural = "News"
and the template file is as follows
{% extends 'base.html' %}
{% block title %}Welcome to my blog{% endblock %}
{% block content %}
{% if news %}
{% for singleitem in news %}
<h2>{{ singleitem.title }}</h2>
<p>{{ singleitem.date }}</p>
{{ singleitem.text }}
{% endfor %}
{% endif %}
{% endblock %}
the input in the textbox is as follows
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam pharetra aliquet arcu. Praesent non elit dolor, vel bibendum lectus. Proin mauris nisl, faucibus sit amet commodo et, interdum a ligula. Ut sapien leo, egestas non molestie vitae, aliquam eget purus. Sed at libero sapien. Ut id dolor elit. Ut placerat massa massa. Quisque posuere pellentesque lorem ac tristique. Nam lacinia tincidunt felis ac adipiscing. Suspendisse elit risus, cursus vel dignissim et, lacinia sit amet neque. Morbi tincidunt sem id augue fermentum adipiscing.
</p>
<p>
Quisque commodo lorem eu tortor auctor sodales. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent condimentum ante id erat dapibus ac rhoncus dui hendrerit. Curabitur at diam vitae ipsum sagittis vestibulum ac et metus. Donec in molestie justo. In eget fringilla lacus. Vestibulum gravida quam quis dui aliquam ut gravida justo rhoncus. Nam euismod mattis purus pulvinar scelerisque. Nam tortor augue, cursus vel ultrices ut, pharetra id leo. Etiam tristique, augue aliquam faucibus dictum, libero justo egestas ante, ut volutpat metus nunc vitae arcu. Aliquam erat volutpat. Sed laoreet posuere sodales.
</p>
<p>
Donec urna urna, facilisis cursus auctor quis, eleifend nec diam. Proin eros dolor, aliquet ut euismod a, viverra sit amet turpis. Suspendisse at dolor quam. Phasellus suscipit rhoncus nisl at feugiat. Aenean in adipiscing purus. Etiam non ligula ligula. Nulla sit amet urna libero, et suscipit nulla. Suspendisse congue purus a eros accumsan eu volutpat ante euismod. Proin ut massa turpis, in gravida diam. Maecenas metus dui, cursus sed commodo eget, accumsan nec arcu.
</p>
which is displayed as follows, django doesn't recognize html tags
<p> Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Etiam pharetra aliquet arcu. Praesent non elit dolor, vel bibendum
lectus. Proin mauris nisl, faucibus sit amet commodo et, interdum a
ligula. Ut sapien leo, egestas non molestie vitae, aliquam eget purus.
Sed at libero sapien. Ut id dolor elit. Ut placerat massa massa.
Quisque posuere pellentesque lorem ac tristique. Nam lacinia tincidunt
felis ac adipiscing. Suspendisse elit risus, cursus vel dignissim et,
lacinia sit amet neque. Morbi tincidunt sem id augue fermentum
adipiscing. </p>
<p> Quisque commodo lorem eu tortor auctor sodales. Lorem ipsum
dolor sit amet, consectetur adipiscing elit. Praesent condimentum ante
id erat dapibus ac rhoncus dui hendrerit. Curabitur at diam vitae
ipsum sagittis vestibulum ac et metus. Donec in molestie justo. In
eget fringilla lacus. Vestibulum gravida quam quis dui aliquam ut
gravida justo rhoncus. Nam euismod mattis purus pulvinar scelerisque.
Nam tortor augue, cursus vel ultrices ut, pharetra id leo. Etiam
tristique, augue aliquam faucibus dictum, libero justo egestas ante,
ut volutpat metus nunc vitae arcu. Aliquam erat volutpat. Sed laoreet
posuere sodales. </p>
<p> Donec urna urna, facilisis cursus auctor quis, eleifend nec
diam. Proin eros dolor, aliquet ut euismod a, viverra sit amet turpis.
Suspendisse at dolor quam. Phasellus suscipit rhoncus nisl at feugiat.
Aenean in adipiscing purus. Etiam non ligula ligula. Nulla sit amet
urna libero, et suscipit nulla. Suspendisse congue purus a eros
accumsan eu volutpat ante euismod. Proin ut massa turpis, in gravida
diam. Maecenas metus dui, cursus sed commodo eget, accumsan nec arcu.
</p>
how to format text for output using django output field?
//yousuf
Use the "safe" filter. Like {{ singleitem.text|safe }}. I think thats what you are looking for.
Using django templates I would like to split a block of text on the first fullstop.
I would then like to give the first sentence a class of highlight and then the rest of the text a class of normal. how would i do this? e.g. (I know this doesn't work)
text = Aliquam pretium vestibulum nibh, vel molestie velit varius nec Curabitur non neque sed elit tincidunt. Dignissim eget vel du molestie magna auctor faucibus. Curabitur id nisl nec ipsum molestie egestas in at dolor. Morbi et risus ac quam sagittis accumsan. Morbi vitae elementum metus. Vestibulum malesuada ornare elit, et interdum nisi imperdiet sed.
<p class="highlight">{{text|split:"."[0]}}</p>
<p class="normal">{{text|split:"."[1]}}</p>
which would give
<p class="highlight">Aliquam pretium vestibulum nibh, vel molestie velit varius nec Curabitur non neque sed elit tincidunt.</p>
<p class="normal">Dignissim eget vel du molestie magna auctor faucibus. Curabitur id nisl nec ipsum molestie egestas in at dolor. Morbi et risus ac quam sagittis accumsan. Morbi vitae elementum metus. Vestibulum malesuada ornare elit, et interdum nisi imperdiet sed.</p>
I am using Django 1.1
Define a custom filter, say mysplit.
#register.filter
def mysplit(value, sep = "."):
parts = value.split(sep)
return (parts[0], sep.join(parts[1:]))
Then use the filter in your template:
{% with text|mysplit:"." as parts %}
<p class="highlight">{{ parts.0 }}</p>
<p class="normal">{{ parts.1 }}</p>
{% endwith %}
This was tested with Django 1.2.1.