一个 url 用于具有 ID 和不具有 ID 的视图

one url for views with id and not with id

有没有办法只使用一个 url 的视图来显示带 id(token) 和不带 id(token) 的内容。例如,如果未提供令牌,则有一个视图显示用户配置文件列表,否则显示具有传递的令牌的特定用户。

这是一个视图

def get(self, request, token=None, format=None):
      """
      Returns a list of profile of user or single user if token is provided
      """
      reply={}
      try:
          profile_instance = Profile.objects.filter(user=self.request.user)
          if token:
              profile = profile_instance.get(token=token)
              reply['data'] = self.serializer_class(profile).data
          else:
              reply['data'] = self.serializer_class(profile_instance, many=True).data
      except:
          reply['data']=[]
      return Response(reply, status.HTTP_200_OK)

url 会是这样的

url(
      r'^users/$',
      views.UserList.as_view(),
      name="user_list"
  ),
url(
   r'^users/(?P<token>[0-9a-z]+)$',
   views.UserList.as_view(),
   name="user_profile"
),

有没有办法只有一个url?

当然有办法。只需将 token url 参数设为可选即可。像这样:

url(r'^users/(?P<token>[0-9a-z]+)?$', views.UserList.as_view(), name='user_profile'),

注意尾随 ?,这意味着 token 的 0 或 1 个匹配项。如果提供了 token 那么它将是提供的值(显然!)。如果不是,它将是 None.