【问题标题】:Django URL "contains" some string?Django URL“包含”一些字符串?
【发布时间】:2015-05-31 17:04:54
【问题描述】:

如何检查我的网址是否包含一些字符串?

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

没用!如果我的 url 中有回调,Django 不会使用 event_search_jsonp 视图 - http://127.0.0.1:8000/api/search/?callback=123

编辑 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)

【问题讨论】:

    标签: regex django django-urls


    【解决方案1】:

    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()
    

    【讨论】:

    • 我使用 Django REST Framework 中的 CBV,设置渲染器时没有请求对象。
    • 是的,该请求始终在 CBV 中作为self.request 提供。
    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2013-04-24
    • 2013-10-25
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多