【问题标题】:Django Rest Framework get URI template for view-details from viewDjango Rest Framework 从视图中获取视图详细信息的 URI 模板
【发布时间】:2019-12-08 19:37:16
【问题描述】:

我想获取 Django 视图的 URI 模板。在Internet Standards URI template 中,不是 Django url 模板标签。例如,对于带有以下内容的 urls.py:

from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register(r'collections', views.CollectionViewSet)

和 view.py 一起

from restframework import viewsets

class CollectionViewSet(viewsets.ModelViewSet):
    queryset = Collection.objects.all()
    serializer_class = serializers.CollectionSerializer
    lookup_field='name'

def list(self, *args, **kwargs):
    <...code overriding list...>

我想做的是能够从列表函数中获取 uri 模板,如下所示:

'http://localhost:8000/api/collections/{name}/'

我尝试过使用 rest 框架的 'reverse',它是 django 'reverse' 功能的扩展;像这样:

from rest_framework.reverse import reverse
field=self.lookup_field
url = reverse('collection-detail', args=['temp'], request=request)
url = url.replace('temp', '{' + field + '}')

不过这太笨重了!有没有更好的办法??谢谢你:)

我试图用谷歌搜索,但所有结果都是关于 url 模板标签的,这完全是另外一回事。

【问题讨论】:

    标签: python django django-rest-framework uri


    【解决方案1】:

    我不知道任何开箱即用的解决方案,但我知道 django-extensions 中有一个命令可以打印所有 url 模式及其参数, 您可以从他们的做法中找到解决方案: Code extract for show_urls command

    # Basicly they load urls configurations
    # ...
    urlconf = __import__(getattr(settings, 'ROOT_URLCONF'), {}, {}, [''])
    # ...
    # then you can have a look on the patterns
    print(urlconf.urlpatterns)
    

    对不起,如果这看起来太“hacky”,但也许它可以帮助你。

    【讨论】:

    • 嘿,谢谢,这似乎很有帮助。我将不得不挖掘一下,看看我是否可以让它工作。将恢复。
    • 赞成。有关我找到的不同解决方案,请参阅我的答案。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    相关资源
    最近更新 更多