2013-09-30 8 views
0

У меня есть QR-код, который указывает на URL-адрес моего сайта, который не существует. Я не хочу создавать страницу только для этого QR-кода, а просто перенаправлять пользователя на домашнюю страницу. Я сейчас на Django 1.4.5, и я уверен, что для этого должно быть простое решение.URL-адрес перенаправления в Django 1.4.5

Одна вещь, которую я нашел было это, которое я ставлю в моем urls.py файле:

from django.views.generic import RedirectView 
urlpatterns = patterns('', 
    (r'^bad-QR-url/not-here$', RedirectView.as_view(url='/')), 

Однако это не похоже на работу. Этот код для Django 1.5? В любом случае, любая помощь будет отличной.

Спасибо!

+0

Почему вы не используете 404? –

+0

Эти QR-коды находятся на обратной стороне визитных карточек людей, поэтому было бы немного смущать их, чтобы вызвать ошибку 404 страницы. То есть, если я не полностью понимаю. – Marnchair

+0

Это обычное поведение для страницы, которая не найдена [вы можете посмотреть на это] (https://docs.djangoproject.com/en/1.5/topics/http/views/#the-http404-exception), которые используют попытка/уловка –

ответ

1

Напишите свой собственный обработчик 404 или измените режим просмотра QR, перезаписав функцию get_object.

class QRView(DetailView): 
    def get_object(self, queryset=None): 
     """ 
     Returns the object the view is displaying. 

     By default this requires `self.queryset` and a `pk` or `slug` argument 
     in the URLconf, but subclasses can override this to return any object. 
     """ 
     # Use a custom queryset if provided; this is required for subclasses 
     # like DateDetailView 
     if queryset is None: 
      queryset = self.get_queryset() 

     # Next, try looking up by primary key. 
     pk = self.kwargs.get(self.pk_url_kwarg, None) 
     slug = self.kwargs.get(self.slug_url_kwarg, None) 
     if pk is not None: 
      queryset = queryset.filter(pk=pk) 

     # Next, try looking up by slug. 
     elif slug is not None: 
      slug_field = self.get_slug_field() 
      queryset = queryset.filter(**{slug_field: slug}) 

     # If none of those are defined, it's an error. 
     else: 
      raise AttributeError(u"Generic detail view %s must be called with " 
           u"either an object pk or a slug." 
           % self.__class__.__name__) 

     try: 
      obj = queryset.get() 
     except ObjectDoesNotExist: 
      # REDIRECT GOES HERE. 
     return obj 
+0

Должно быть, я должен отметить, что я - джанго-нубак, который даже не слышал о Django пару месяцев назад. Я уверен, что ваше решение работает, но это происходит прямо над моей головой. Есть четыре визитных карточки с четырьмя различными QR-кодами, которые обычно указывали на какую-то биографию о держателе карты. Разве нет простой процедуры, которую я могу ввести в urls.py? – Marnchair