aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Kaplan-Moss2009-04-12 18:45:51 -0500
committerJacob Kaplan-Moss2009-04-12 18:45:51 -0500
commit1210c461e575e14b4b8eb90f429757456cbea8e0 (patch)
tree36675e533662014ca6d7b61b86e1fe5e00719349
parent9d86549d74c6d3f4d7e661fd643aee739e268a6d (diff)
downloaddjango-shorturls-1210c461e575e14b4b8eb90f429757456cbea8e0.tar.bz2
Added docs, and fixed a bug that writing the docs revealed.
-rw-r--r--README68
-rw-r--r--src/shorturls/templatetags/shorturl.py16
2 files changed, 75 insertions, 9 deletions
diff --git a/README b/README
index f738c17..c763f1e 100644
--- a/README
+++ b/README
@@ -11,5 +11,71 @@ slightly and packaged by Jacob Kaplan-Moss.
Usage
=====
-XXX
+So, you want to host your own short URLs on your Django site:
+ 1. In your settings, define a set of prefixes for short URLs::
+
+ SHORTEN_MODELS = {
+ 'A': 'myapp.animal',
+ 'V': 'myapp.vegetable',
+ 'M': 'myapp.mineral'
+ }
+
+ The keys are string prefixes; they can be any string, actually,
+ but since we're going for short a single character is probably good.
+
+ Values are the (hopefully-familiar) ``"<app-name>.<model-class>"`` used
+ by Django to identify a model. Remember: ``app-name`` is the
+ (case-sensitive) last bit of your app's name in ``INSTALLED_APPS``, and
+ ``<model-class>`` is your model class's name, lowercased.
+
+ Make sure your models have a ``get_absolute_url()`` method defined.
+
+ 2. Wire up the redirect view by adding to your URLconf::
+
+ ('^short/', include('shorturls.urls'))
+
+ 3. If you'd like to quickly link to shortened URLs in your templates, stick
+ ``"shorturls"`` in ``INSTALLED_APPS``, and then in your templates do::
+
+ {% load shorturls %}
+ <a href="{% shorturl object %}">...</a>
+
+ (where ``object`` is a model instance).
+
+ Alternatively::
+
+ {% load shorturls %}
+ {% recanonical object %}
+
+ This generates the whole ``<link rev="canonical" href="...">`` tag for
+ you.
+
+That's it.
+
+If you'd like more control, keep reading.
+
+Settings
+========
+
+Available settings are:
+
+ ``SHORTEN_MODELS``
+ You've seen this one.
+
+ ``SHORT_BASE_URL``
+ If defined, the ``shorturl`` and ``revcanonical`` template tags will
+ prefix generated URLs with this value. Use this if you've got a shorter
+ domain name you'd like to use for small URLs.
+
+ For example, given ``SHORT_BASE_URL = 'http://exm.pl/'``, ``{% shorturl
+ obj %}`` would return something like ``http://exm.pl/AbCd``.
+
+ ``SHORTEN_FULL_BASE_URL``
+ The domain to redirect to when redirecting away from the small URL.
+ Again, you'll use this if your short URL base and your "real" site
+ differ.
+
+ If not defined, the redirect view will try to guess the proper domain by
+ consulting the ``django.contrib.sites`` framework, if installed, or the
+ requested domain, if not. \ No newline at end of file
diff --git a/src/shorturls/templatetags/shorturl.py b/src/shorturls/templatetags/shorturl.py
index 5d4ec5e..2eef0ce 100644
--- a/src/shorturls/templatetags/shorturl.py
+++ b/src/shorturls/templatetags/shorturl.py
@@ -26,19 +26,19 @@ class ShortURL(template.Node):
prefix = self.get_prefix(obj)
except (AttributeError, KeyError):
return ''
-
+
+ tinyid = base62.from_decimal(obj.pk)
+
+ if hasattr(settings, 'SHORT_BASE_URL') and settings.SHORT_BASE_URL:
+ return urlparse.urljoin(settings.SHORT_BASE_URL, prefix+)
+
try:
- url = urlresolvers.reverse('shorturls.views.redirect', kwargs = {
+ return urlresolvers.reverse('shorturls.views.redirect', kwargs = {
'prefix': prefix,
- 'tiny': base62.from_decimal(obj.pk)
+ 'tiny': tinyid
})
except urlresolvers.NoReverseMatch:
return ''
-
- if hasattr(settings, 'SHORT_BASE_URL') and settings.SHORT_BASE_URL:
- return urlparse.urljoin(settings.SHORT_BASE_URL, url)
- else:
- return url
def get_prefix(self, model):
if not hasattr(self.__class__, '_prefixmap'):