This code works like that in the Google Groups you see and when try to see an e-mail and it is like this "[email protected]" with a link to write a captcha code and see the true value.
You can use it for anything you want: links, blocks of texts, block of HTML, etc.
To use in your template, place the a code like this (remember to load the template tags file with a {% load file_name %} before):
{% protectantirobots %}
<a href="mailto: {{ office.email }}">{{ office.email }}</a>
{% endprotectantirobots %}
You can also use **django-plus** application to do this:
[http://code.google.com/p/django-plus/](http://code.google.com/p/django-plus/)
This provides basic [Tenjin](http://www.kuwata-lab.com/tenjin/) integration, using a decorator. Tenjin is a blazingly fast templating system, the fastest pure-python system available.
For usage and configuration, see the example in the code.
I modeled this after Robert Thomson's code for Mako integration.
Sometimes we want to get a queryset or 404, for example, if we're passing our queryset to a subclassed generic view. This is identical to get_list_or_404 but returns a queryset.
<code>
is_loaded = False
if not is_loaded:
is_loaded = True
#... ExceptionHandlingMiddleware as EHM
import views
EHM.append(views.AuthFailError, views.auth_fail) # when AuthFailError thrown it redirects to `auth_fail` view function.
</code>
A simple filter that generates a url from an object that has a get_absolute_url method.
{{ object|quick_url }}
a previous, simpler approach:
[#511](http://www.djangosnippets.org/snippets/511/)
Banning middleware with allow,deny functionality. Can select by User id/username and IP addresses. Returns a HttpResponseForbidden when banning requests. Banning by users is real nice because no matter which IP a pest comes from, they can never retrieve anything that they log into. Very handy for keeping out those unwanted pests! I personally developed this further to use a Ban model to keep track of different bans on different sites. Maybe ill post that eventually, but this runs as is with static vars. Implementation from [HvZ Source](http://www.hvzsource.com)
There is a commonly encountered problem with Django and character sets. Windows applications such as Word/Outlook add characters that are not valid ISO-8859-1 and this results in problems saving a Django model to a database with a Latin 1 encoding. These characters should also be converted to avoid any display issues for the end users even if you are using a UTF-8 database encoding.
The topic is well covered at [Effbot](http://effbot.org/zone/unicode-gremlins.htm) and contains a list of appropriate conversions for each of hte problem characters.
Correcting this for all of your Django models is another issue. Do you handle the re-encoding during the form validation? The save for each model? Create a base class that all your models need to inherit from?
The simplest solution I have created leverages [Signals](http://code.djangoproject.com/wiki/Signals)
Combining the re-encoding method suggested at Effbot and the pre_save signal gives you the ability to convert all the problem characters right before the save occurs for any model.
**kill_gremlins method replaced with Gabor's suggestion**
If you want to modify the length of a column of a contrib application, you can either
modify django (cumbersome) or you can run a post_syncdb signal hook.
Related: [Ticket 4748](http://code.djangoproject.com/ticket/4748)
Automatically sets date to today if only time part was entered.
If today is 01/01/2008, then both DateTimeField and TodayDateTimeField clean '2008-01-01 15:05' to datetime(2008,01,01,15,5,0), while '15:05' is cleaned as datetime(1900,01,01,15,5,0) for DateTimeField but datetime(2008,01,01,15,5,0) for TodayDateTimeField.
Serving KML from your Django webapp to feed Google-earth isn't that hard, it's just some fun with templates, plus some headers.
But serving a compressed version of your KML needs a trick.
KMZ isn't just zipped KML. A good KMZ file is a zipped file that decompress to a file called 'doc.kml', which is a KML file.
So, I suppose 'http://yourdomain.com/kml/' points to a view generating a well-formed KML.
I even suppose that 'http://yourdomain.com/kmz/' points to the same view, but it will serve KMZ instead that KML: no change needed in your code!
If your webapps serves more than one KML file you just need to append the new KMZ urls to your urls.py, pointing to the very same view serving the KML version. Then add that urls to the list in this middleware.
As an example I included a 'http://yourdomain.com/kml/restricted/' to 'http://yourdomain.com/kmz/restricted/' conversion.
A middleware that parses the HTTP_ACCEPT header of a request.
The request gets a new method called "accepts" that takes a string and returns True if it was in the list of accepted mime-types.
It makes it possible to write views like:
def exampleview(request):
if request.accepts('application/json'):
# return a json representation
if request.accepts('text/html'):
# return html
Please note that with this middleware the view defines the priority of the mime-types, not the order in which they where provided in the HTTP-Header.
This view will provide a link for AuthSub proxy authentication to the Google Contacts API and then grab the user's Google contacts and compare against User.email for possible user relationships.
A couple of things to note:
* Dependency on the GData Python client library:
http://code.google.com/p/gdata-python-client/
* The domain hosting the view must be verified by Google's domain manager (otherwise API calls will result in a 403):
https://www.google.com/accounts/ManageDomains
Thanks to Simon for get_url_host and get_full_url.
This custom filter is helpful if you want to convert plain text to include html line breaks but you aren't sure if the text is actually plain text or if it already contains html line breaks.
First the filter looks for if the text contains any br, p, or table tags, if it does the text is returned as is. If it doesn't then the same functionality as the [linebreaks](http://www.djangoproject.com/documentation/templates/#linebreaks) filter is applied to the text.
You're looking at the top-rated snippets currently on the site; if you'd like to contribute, sign up for an account and you'll be able to rate any snippet you see.