Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
b1645d7
commit cf0162b
Showing
5 changed files
with
249 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<link rel="stylesheet" href="../static/style.css"> | ||
<link rel="stylesheet" href="../static/font-awesome.min.css"> | ||
<link rel="stylesheet" href="../static/admonition-text.css"> | ||
<link rel="stylesheet" href="../static/pygments.css"> | ||
<title>Django меняем язык в зависимости от домена</title> | ||
</head> | ||
<body> | ||
<main> | ||
|
||
|
||
<div class="blog-post"> | ||
|
||
<h1>Django меняем язык в зависимости от домена</h1> | ||
|
||
<p class="meta"> | ||
|
||
<a href="https://twitter.com/ali_aliev">Ali Aliev</a> | ||
|
||
[2016-05-18] | ||
</p> | ||
|
||
<p>Появилась задача менять язык интерфейса в зависимости от домена, который был прикреплен к сайту. Как оказалась решение данной задачи очень простое достаточно написать небольшой middleware.</p> | ||
<p>Для начала создадим в настройках settings.py следующий словарь, который мы будем использовать и читать:</p> | ||
<div class="highlight"><pre><span class="n">LANGUAGES_DOMAINS</span> <span class="o">=</span> <span class="p">{</span> | ||
<span class="s">'somedomain.com'</span><span class="p">:</span> <span class="s">'en'</span><span class="p">,</span> | ||
<span class="p">}</span> | ||
</pre></div> | ||
<p>далее код самого middleware:</p> | ||
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span> | ||
<span class="kn">from</span> <span class="nn">django.utils</span> <span class="kn">import</span> <span class="n">translation</span> | ||
|
||
|
||
<span class="k">class</span> <span class="nc">DomainLocaleMiddleware</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | ||
<span class="sd">"""</span> | ||
<span class="sd"> Set language regarding of domain</span> | ||
<span class="sd"> """</span> | ||
<span class="k">def</span> <span class="nf">process_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span> | ||
<span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">META</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">'HTTP_ACCEPT_LANGUAGE'</span><span class="p">):</span> | ||
<span class="c"># Totally ignore the browser settings... </span> | ||
<span class="k">del</span> <span class="n">request</span><span class="o">.</span><span class="n">META</span><span class="p">[</span><span class="s">'HTTP_ACCEPT_LANGUAGE'</span><span class="p">]</span> | ||
|
||
<span class="n">current_domain</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">META</span><span class="p">[</span><span class="s">'HTTP_HOST'</span><span class="p">]</span> | ||
<span class="n">lang_code</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">LANGUAGES_DOMAINS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">current_domain</span><span class="p">)</span> | ||
|
||
<span class="k">if</span> <span class="n">lang_code</span><span class="p">:</span> | ||
<span class="n">translation</span><span class="o">.</span><span class="n">activate</span><span class="p">(</span><span class="n">lang_code</span><span class="p">)</span> | ||
<span class="n">request</span><span class="o">.</span><span class="n">LANGUAGE_CODE</span> <span class="o">=</span> <span class="n">lang_code</span> | ||
</pre></div> | ||
|
||
</div> | ||
|
||
|
||
</main> | ||
<a href="https://github.com/aliev"><img style="position: absolute; top: 0; left: 0; border: 0;" src="https://camo.githubusercontent.com/82b228a3648bf44fc1163ef44c62fcc60081495e/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f6c6566745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_left_red_aa0000.png"></a> | ||
<script> | ||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); | ||
|
||
ga('create', 'UA-42591955-1', 'auto'); | ||
ga('send', 'pageview'); | ||
|
||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<link rel="stylesheet" href="../static/style.css"> | ||
<link rel="stylesheet" href="../static/font-awesome.min.css"> | ||
<link rel="stylesheet" href="../static/admonition-text.css"> | ||
<link rel="stylesheet" href="../static/pygments.css"> | ||
<title>Еще несколько полезных фильтров в Django ORM</title> | ||
</head> | ||
<body> | ||
<main> | ||
|
||
|
||
<div class="blog-post"> | ||
|
||
<h1>Еще несколько полезных фильтров в Django ORM</h1> | ||
|
||
<p class="meta"> | ||
|
||
<a href="https://twitter.com/ali_aliev">Ali Aliev</a> | ||
|
||
[2016-05-18] | ||
</p> | ||
|
||
<p>Показать события, которые будут проходить только в выходные дни:</p> | ||
<div class="highlight"><pre><span class="n">Evens</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">eventStarttime__week_day__in</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">7</span><span class="p">])</span> | ||
</pre></div> | ||
<p>Показать события которые будут проходить только на этой неделе:</p> | ||
<div class="highlight"><pre><span class="n">date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">()</span> | ||
<span class="n">start_week</span> <span class="o">=</span> <span class="n">date</span> <span class="o">-</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">weekday</span><span class="p">())</span> | ||
<span class="n">end_week</span> <span class="o">=</span> <span class="n">start_week</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span> | ||
<span class="n">Event</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">eventStarttime__range</span><span class="o">=</span><span class="p">[</span><span class="n">start_week</span><span class="p">,</span> <span class="n">end_week</span><span class="p">])</span> | ||
</pre></div> | ||
<p>Показать события, id которых дублируются</p> | ||
<div class="highlight"><pre><span class="n">Event</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">values</span><span class="p">(</span><span class="s">'eventId'</span><span class="p">)</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">Count</span><span class="p">(</span><span class="s">'eventId'</span><span class="p">))</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">eventId__count__gt</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> | ||
</pre></div> | ||
<p>Показать события которые будут проходить сегодня</p> | ||
<div class="highlight"><pre><span class="kn">import</span> <span class="nn">datetime</span> | ||
<span class="n">today_min</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">combine</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">(),</span> <span class="n">datetime</span><span class="o">.</span><span class="n">time</span><span class="o">.</span><span class="n">min</span><span class="p">)</span> | ||
<span class="n">today_max</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">combine</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">(),</span> <span class="n">datetime</span><span class="o">.</span><span class="n">time</span><span class="o">.</span><span class="n">max</span><span class="p">)</span> | ||
|
||
<span class="n">Event</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">eventStarttime__range</span><span class="o">=</span><span class="p">[</span><span class="n">today_min</span><span class="p">,</span> <span class="n">today_max</span><span class="p">])</span> | ||
</pre></div> | ||
|
||
</div> | ||
|
||
|
||
</main> | ||
<a href="https://github.com/aliev"><img style="position: absolute; top: 0; left: 0; border: 0;" src="https://camo.githubusercontent.com/82b228a3648bf44fc1163ef44c62fcc60081495e/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f6c6566745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_left_red_aa0000.png"></a> | ||
<script> | ||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); | ||
|
||
ga('create', 'UA-42591955-1', 'auto'); | ||
ga('send', 'pageview'); | ||
|
||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<link rel="stylesheet" href="../../static/style.css"> | ||
<link rel="stylesheet" href="../../static/font-awesome.min.css"> | ||
<link rel="stylesheet" href="../../static/admonition-text.css"> | ||
<link rel="stylesheet" href="../../static/pygments.css"> | ||
<title>Ali Aliev blog</title> | ||
</head> | ||
<body> | ||
<main> | ||
|
||
|
||
|
||
<div class="blog-post"> | ||
|
||
<h4>[2015-06-03] <a href="../../f-vyrazhenie-v-django-orm/">F выражение в Django ORM</a></h4> | ||
|
||
|
||
</div> | ||
|
||
|
||
|
||
|
||
<div class="pagination"> | ||
|
||
<a href="../../">« Previous</a> | ||
|
||
| 2 | | ||
|
||
<span class="disabled">Next »</span> | ||
|
||
</div> | ||
|
||
|
||
</main> | ||
<a href="https://github.com/aliev"><img style="position: absolute; top: 0; left: 0; border: 0;" src="https://camo.githubusercontent.com/82b228a3648bf44fc1163ef44c62fcc60081495e/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f6c6566745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_left_red_aa0000.png"></a> | ||
<script> | ||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); | ||
|
||
ga('create', 'UA-42591955-1', 'auto'); | ||
ga('send', 'pageview'); | ||
|
||
</script> | ||
</body> | ||
</html> |
Oops, something went wrong.