0

我可以使用中间件在页面请求之间保留多个用户选择的选项吗?

我有几个值,即车辆年份、品牌、型号、系列、样式、颜色和传输。我希望用户能够选择一个选项,同时保持先前选择的选项处于活动状态。我不想为此使用会话,因为我希望 URL 可以收藏。

我在想类似的东西:

def get_choices(self):
   try:
      return self.REQUEST["year"]
   except (KeyError, ValueError, TypeError):
      return 1

class ChoicesMiddleware(object):
  def process_request(self, request):
      .....

我也不确定如何返回 get_choices() 下的所有选项。

编辑 1

def get_choices(self):
    user_choices = {}
    for key in ["year", "model", "make", "series", "style"]:
        user_choices[key] = self.REQUEST.get(key)

    return user_choices

class ChoicesMiddleware(object):
   def process_request(self, request):
      return get_choices(self)

编辑 2 我的 URLConf 如下:

(r'^inventory/(?P<year>\d{4})(?P<make>[-\w\s]+)
   (?P<model>[-\w\s]+)(?P<series>[-\w\s]+)(?P<body>[-\w\s]+)
   (?P<exterior>[-\w\s]+)(?P<interior>[-\w\s]+)
   (?P<transmission>[-\w\s]+)$', 'inventory'),

然后视图如下:

def inventory(request, page_by=None, year=None, make=None, 
    model=None, series=None, body=None, interior=None, exterior=None, 
    transmission=None):

  #Initialize empty variable list.
  kwargs = {}

  if "year" in request.GET:
    year = request.REQUEST["year"]
    kwargs['common_vehicle__year__year__exact'] = year
  ....The rest of the vars are populated in the same way.
4

2 回答 2

0

您可以将它们存储在 GET 中,那里没有问题。通过字典返回。我不明白关于保留用户选择的部分 - 例如,您想在一年中有几个选择?然后你需要 GET 中的数组,而不是值。但是对于值来说很简单:

def get_choices(self):
    user_choices = {}
    for key in ["year", "model", "maker"]:
        user_choices[key] = self.REQUEST.get(key)
    return user_choices
于 2009-12-14T07:17:11.300 回答
0

您想自动将用户选择作为 GET 参数添加到 URL 吗?

我认为您无法通过中间件将 GET 请求参数添加到 URL。

于 2009-12-14T06:30:33.080 回答