<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Code-It &#187; templates</title>
	<atom:link href="http://lois.di-qual.net/blog/tag/templates/feed/" rel="self" type="application/rss+xml" />
	<link>http://lois.di-qual.net/blog</link>
	<description></description>
	<lastBuildDate>Tue, 30 Oct 2012 19:19:29 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Django &#8211; Absolute media URIs from templates</title>
		<link>http://lois.di-qual.net/blog/django-absolute-media-uris-from-templates/</link>
		<comments>http://lois.di-qual.net/blog/django-absolute-media-uris-from-templates/#comments</comments>
		<pubDate>Mon, 16 Jul 2012 21:54:17 +0000</pubDate>
		<dc:creator>Loïs Di Qual</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[templates]]></category>

		<guid isPermaLink="false">http://lois.di-qual.net/blog/?p=74</guid>
		<description><![CDATA[Sometimes, you need to build an absolute URI to a media file from your templates: 1http://example.com/media/sample.jpg After following this small tutorial, you&#8217;ll be able to do this: 12{% load mytemplatetags %} {{ media_name&#124;absolute_media_url:request }} Settings In urls.py, in urlpatterns, add a reverse name to the media URL: 123456urlpatterns = patterns&#40;'', &#160; &#160; # Before &#160; [...]]]></description>
				<content:encoded><![CDATA[<p>Sometimes, you need to build an absolute URI to a media file from your templates:</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">http://example.com/media/sample.jpg</div></td></tr></tbody></table></div>
<p>After following this small tutorial, you&#8217;ll be able to do this:</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">{% load mytemplatetags %}<br />
{{ media_name|absolute_media_url:request }}</div></td></tr></tbody></table></div>
<p><span id="more-74"></span></p>
<h2>Settings</h2>
<p>In <code class="codecolorer text default"><span class="text">urls.py</span></code>, in <code class="codecolorer text default"><span class="text">urlpatterns</span></code>, add a reverse name to the media URL:</p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">urlpatterns <span style="color: #66cc66;">=</span> patterns<span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># Before</span><br />
&nbsp; &nbsp; <span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'^media/(?P&lt;path&gt;.*)$'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'django.views.static.serve'</span><span style="color: #66cc66;">,</span> <span style="color: black;">&#123;</span><span style="color: #483d8b;">'document_root'</span>: settings.<span style="color: black;">MEDIA_ROOT</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># After</span><br />
&nbsp; &nbsp; url<span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'^media/(?P&lt;path&gt;.*)$'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'django.views.static.serve'</span><span style="color: #66cc66;">,</span> <span style="color: black;">&#123;</span><span style="color: #483d8b;">'document_root'</span>: settings.<span style="color: black;">MEDIA_ROOT</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">,</span> name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;media&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
<span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>You can now reverse media files using <code class="codecolorer text default"><span class="text">request.build_absolute_uri(reverse('media', args=['/path/to/media']))</span></code>.</p>
<p>In <code class="codecolorer text default"><span class="text">settings.py</span></code>, add <code class="codecolorer text default"><span class="text">django.core.context_processors.request</span></code> to <code class="codecolorer text default"><span class="text">TEMPLATE_CONTEXT_PROCESSORS</span></code>.</p>
<p>This context processor allows you to access the <code class="codecolorer text default"><span class="text">request.build_absolute_uri()</span></code> function from templates:</p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: black;">&#123;</span><span style="color: black;">&#123;</span> request.<span style="color: black;">build_absolute_uri</span> <span style="color: black;">&#125;</span><span style="color: black;">&#125;</span></div></td></tr></tbody></table></div>
<p>However, you can&#8217;t pass parameters to this function, so you won&#8217;t be able to reverse media path to URL. That&#8217;s why we need a filter.</p>
<h2>Absolute url for a media</h2>
<p>The following filter will allow you to build an absolute URL to a media. In <code class="codecolorer text default"><span class="text">templatetags/mytemplatetags.py</span></code>:</p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #483d8b;">'''<br />
Usage: {{ media|absolute_media_url:request }}<br />
'''</span><br />
<span style="color: #66cc66;">@</span>register.<span style="color: #008000;">filter</span><br />
<span style="color: #ff7700;font-weight:bold;">def</span> absolute_media_uri<span style="color: black;">&#40;</span>media<span style="color: #66cc66;">,</span> request<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> request.<span style="color: black;">build_absolute_uri</span><span style="color: black;">&#40;</span>reverse<span style="color: black;">&#40;</span><span style="color: #483d8b;">'media'</span><span style="color: #66cc66;">,</span> args<span style="color: #66cc66;">=</span><span style="color: black;">&#91;</span><span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>media<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>Don&#8217;t forget to add a blank <code class="codecolorer text default"><span class="text">__init__.py</span></code> in <code class="codecolorer text default"><span class="text">templatetags/</span></code> or django won&#8217;t take your template tag into account.</p>
]]></content:encoded>
			<wfw:commentRss>http://lois.di-qual.net/blog/django-absolute-media-uris-from-templates/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
