Джанго хочет использовать переменную из другого представления - PullRequest
0 голосов
/ 09 февраля 2011

У меня есть список элементов в представлении под названием client_items. Я хочу иметь возможность использовать переменную items_list`, которая представляет собой другое представление с именем edit_order в client_items. Так есть ли способ вызвать переменную из другого представления? (Импортируйте переменную из другого представления и сможете использовать эту переменную в другом) Я не могу просто написать ее в представлении client_items, потому что для этого требуется увеличение order_no.

Редактировать: вот мои последние взгляды. Я попытался создать другое представление с именем items_in_edit_order. В этот момент я получаю `order_no не определено.

    def items_in_edit_order(order_no):
        order = models.Order.objects.get(pk = order_no)
        return order

def client_items(request, client_id = 0):
    client = models.Client.objects.get(pk = client_id)
    items = client.storageitem_set.all()
    order = items_in_edit_order(order_no)
    return render_to_response('items.html', {'items':items, 'client':client, 'order':order}, context_instance = RequestContext(request))

Ответы [ 3 ]

6 голосов
/ 10 февраля 2011

Просто добавлю, поскольку никто не сказал этого, и, кажется, вы этого еще не поняли:

Ваше представление client_items должно каким-то образом иметь доступ к переменной order_no. Если по какой-то причине значение не передается через URL, оно должно получить значение от somehwere. Есть только три реальных местоположения, где это могло бы получить это значение:

  1. База данных : это будет работать, если вы, например, храните что-то вроде корзины, которая напрямую связана с пользователем. Так, например, вы можете сделать что-то вроде order_no = Order.objects.filter(cart__user=request.user).order_no, которое получит заказ, связанный с текущей корзиной пользователя, а затем вернет значение order_no.
  2. Сеанс : вы сохраняете order_no в сеансе. Это предполагает, что у вас было более раннее представление, в котором было установлено значение для order_no, и в этот момент вы сохраните его, используя request.session['order_no']=order_no. Позже, когда вы захотите получить значение, вы просто используете order_no=request.session['order_no'] в представлении.
  3. Cookie : не очень рекомендуется, но, тем не менее, вариант. Это сложно, потому что на первый взгляд вам нужно создать объект ответа (как в resp = render_to_response(template_name, locals(), RequestContext(request)) и , затем записать в него cookie resp.set_cookie("order_no", order_no). Вы получаете его с помощью request.COOKIES['order_no']

Существуют и другие, причудливые места, в которых можно хранить значение: файлы, кэш, другие форматы хранения данных и т. Д. Совсем не рекомендуется.

4 голосов
/ 09 февраля 2011

Нет. Напишите функцию, которая возвращает интересующее вас значение, и вызовите ее из обоих представлений.

0 голосов
/ 10 февраля 2011

То, что парень сказал выше, правильно.Вы не должны пытаться «делиться» переменными с другими представлениями.

Однако в случае, если у вас есть или есть причина, вы можете просто сохранить это в сеансе, а затем получить доступ к нему в любом представлении.у которого есть доступ к «запросу».

Надеюсь, что поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...