2015-03-27 3 views
1

Как проверить, содержит ли мой URL некоторую строку?Django URL "содержит" некоторую строку?

url(r'^search/.*callback.*$', 'event_search_jsonp', {}, 'event_search_jsonp'),

Не работает! Django не использует event_search_jsonp вид, если у меня есть обратный вызов в моем URL - http://127.0.0.1:8000/api/search/?callback=123

EDIT 1

У меня есть что-то вроде этого, и как я могу получить request здесь?

class SearchView(APIView): 
    if 'callback' in self.request.GET: 
     renderer_classes = (JSONPRenderer,) 
    else: 
     renderer_classes = (JSONRenderer,) 

    def get(self, request, format=None, *args, **kwargs): 
     events = Event.objects.all().order_by("-id")[:10] 
     serializer = EventSerializer(events, many=True) 
     return Response(serializer.data) 

ответ

3

Django URL-адрес не включает в строку запроса, который является бит после ?. Вы должны были бы сделать тест на ваш взгляд:

def event_search_jsonp(request): 
    if 'callback' in request.GET: 
     # do_something 

Редактировать

Это не работает, потому что атрибуты класса уровня определяются во время импорта, а не во время выполнения. Вместо того, чтобы проводить там тест, вам необходимо определить метод get_renderers. Что-то вроде:

class SearchView(APIView): 
    def get_renderers(self): 
     if 'callback' in self.request.GET: 
      return JSONPRenderer() 
     else: 
      return JSONRenderer() 
+0

Я использую CBV из Django REST Framework, и у меня нет объекта запроса, когда я устанавливаю renderrer. – inlanger

+2

Да, вы делаете, запрос всегда доступен в CBV как 'self.request'. –

+0

Я редактировал вопрос – inlanger

Смежные вопросы