我创建了一个非常简单的API-REST,可以正常工作,但是现在所有链接都是绝对的URL,我想转换为相对URL。
我的配置的简历是:
model.py
class User(models.Model):
name = models.CharField('name', max_length=255, unique=True)
def __str__(self):
return self.name
serializer.py
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('id','url','name')
views.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
作为一种方式,我试图像这样重写ViewSet的上下文:
views.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
def get_serializer_context(self):
return {'request': None}
现在使用此URL打印了相对URL,但是如果我使用浏览器导航,则链接将消失并且仅显示为文本,因此我无法单击differents元素。
是否还需要在浏览器中配置其他功能以使相对URL正常工作?
解决方案取决于您的观点。根据官方docs,您必须像这样将请求传递给序列化程序上下文context = {'request': request}
。尽管可以简单地删除序列化程序上下文方法或在该方法中返回super()
,但这也将解决问题。这是修改后的视图:
class UserViewset(viewsets.ModelViewset):
queryset = User.objects.all()
serializer_class = UserSerializer