2012-06-05 2 views
1

Теперь у меня возникает проблема, когда у меня есть «случайная» ссылка на моем сайте, чтобы увидеть случайного пользователя. Способ, которым я настроен, - это получить user_id, а затем использовать перенаправление для обслуживания соответствующей страницы. Проблема, с которой я сталкиваюсь, заключается в том, что если я нажимаю случайную кнопку несколько раз, нажатие на кнопку возврата приведет меня обратно к странице до «случайных» кликов.поведение перенаправления Django с обратной кнопкой

Чтобы быть более конкретным, это то, что происходит: Домашняя страница, нажмите «Случайно» (перейдите в/user1 /), нажмите «Случайно» (перейдите в/user4 /), «Хит назад» (в конечном итоге на HomePage). В этом случае я хотел бы закончить на/user1/

Это случайный метод вида:

def Random(request): 
    user = helpers.GetRandomUser() 
    return redirect('user_display', user_slug=user.username) 

Шаблон просто имеет ссылку/случайную /, который получает направляется к вышеупомянутому представлению.

Редактировать: По-видимому, он работает так, как ожидалось, в Firefox, но в Chrome. Мне бы хотелось, чтобы во всем мире было поведение, подобное Firefox.

ответ

1

Так что если я правильно вас понял, вы дважды нажимаете на ссылку на тот же URL (например, /random_user/), и вы отвечаете случайным переадресацией. Это кажется совершенно нетрадиционным, и это звучит не так, что Chrome может рассматривать это как единую запись истории.

Чтобы архивировать ваше намеренное поведение в браузерах, просто создайте случайный URL-адрес, прежде чем отображать вашу случайную ссылку пользователя.

Как вы хотите использовать его в нескольких просмотров, write a custom template tag:

@register.simple_tag 
def random_user_url(): 
    user_url = # generate your random user url 
    return user_url 

В шаблоне:

{% load your_tag_lib %} 
<a href="{% random_user_url %}">Random user</a> 

Таким образом, каждый щелчок приводит браузер к другому URL и будут сохранены в памяти, как отдельный вход в историю.

+0

Мы думали сделать это таким образом, но почувствовали, что это окажет негативное влияние на SEO, поэтому мы перешли к представлению, которое затем перенаправляется на страницу пользователя. –

+0

Что-то добавить: щелчок по случайному вызову приведет к перенаправлению на другой URL-адрес, но с использованием представления. Поэтому нажмите на/random/будет перенаправлять на/user1/so/user1 /, что отображается в URL-адресе. –

+0

Другая проблема - отслеживание - как бы я отслеживал, что был выбран «случайный» URL-адрес? –

0

Чтобы быть ясно, когда вы говорите, "Back Button" вы имеете в виду:

  1. Browser Назад Кнопка
  2. Ваше собственное создание кнопки Назад

If 2, вы делаете это через клиентскую сторону? Например, через javascript?

+0

Кнопка обратного просмотра браузера. –

+0

Я бы сохранил последний путь сайта в качестве сеанса, а затем извлек через представление, когда страница снова вызывается с помощью кнопки «Назад». – magicTuscan

+0

Я стараюсь избегать использования сеансов для этого, поскольку это похоже на взлома. –

0

Используйте следующий код, чтобы заставить браузер не кэшировать страницу. Таким образом, кнопка «Назад назад» отправляет запрос на сервер, и теперь вы можете поймать его и перенаправить на нужную страницу.

from django.views.decorators.cache import cache_control 

@cache_control(no_cache=True, must_revalidate=True) 
def func() 
    #some code 
    return 
+0

Я попытался добавить это, но ничего не изменил. Я все еще вижу кнопку возврата на исходную страницу. –

+0

Запрос поступит на исходную страницу ... но у вас должно быть что-то вроде промежуточного ПО запроса, которое проверяет наличие user_id, а если его нет, вы должны перенаправить на соответствующую страницу. –

+0

Приведенный выше код просто указывает браузеру не кэшировать страницу. поэтому, если вы нажмете назад запрос, выйдет на сервер и не будет отображаться из кеша –

Смежные вопросы