Представления на основе классов в Django сохраняют параметры URL в сеансе - PullRequest
0 голосов
/ 30 июня 2018

У меня нормально работает список просмотра django.

Параметры получения URL для фильтрации данных. Его нумерация страниц.

Теперь я хочу сохранить эти данные в течение сеанса пользователя. (номер страницы и параметры URL).

Пример:

  • Я в списке товаров.
  • Я ищу 'foo'
  • Я выбираю страницу 2
  • А затем я нажимаю на любую деталь продукта.
  • Страница будет перенаправлена ​​в подробный вид.

Когда я возвращаюсь к списку товаров, мне нужно сохранить поисковый аргумент 'foo' и выбранную страницу 2.

Какой лучший способ сделать это?

Я использую Django 2.0.6

Models.py

class Product(models.Model):
    name= models.CharField(_('name'), max_length=150)
    price = models.DecimalField(max_digits=10, decimal_places=2, default=0.0)

Views.py

class ProductList(ListView):
    model = Product
    paginated_by = 10

    def get_queryset(self):

        queryset = Product.objects.all()

        name = self.request.GET.get('name', None)
        if name:
            queryset = queryset.filter(name__icontains=name)

        return queryset

Urls.py

path('products/', views.ProductList.as_view(), name='product_list'),

1 Ответ

0 голосов
/ 30 июня 2018

Для этого вы должны поместить URL-адрес в качестве запроса на получение, чтобы вы могли получить полученные значения из URL-адреса и использовать их в своем фильтре для поддержания вашего выбора, например:

url/?variable=value

Затем в представлении Django вы можете получить к нему доступ с помощью request.GET.get('variable') и передать его в качестве контекста на странице отображения HTML, а затем использовать эту переменную в выборе фильтра.

Установка переменной в сеансе:

Для установки переменной в сеансе вы можете установить ее:

request.session['variable'] = 'value' 

и это значение можно получить с помощью:

if 'variable' in request.session:
    variable1 = request.session['variable']

Вы можете сослаться на эту документацию .

...