inlanger
inlanger

Reputation: 2996

Django URL "contains" some string?

How to check if my URL contains some string?

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

Doesn't work! Django doesn't use event_search_jsonp view if I have callback in my url - http://127.0.0.1:8000/api/search/?callback=123

EDIT 1

I have something like this and how I can get request here?

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)

Upvotes: 1

Views: 1364

Answers (1)

Daniel Roseman
Daniel Roseman

Reputation: 599590

Django URLs don't include the querystring, which is the bit after the ?. You'd need to do the test in your view:

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

Edit

That doesn't work because class-level attributes are defined at import time, not at run time. Rather than doing the test there, you need to define the get_renderers method. Something like:

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

Upvotes: 3

Related Questions