2013-06-12 19 views
13

Bir görünüm içinde bir çerez ayarlamak ve daha sonra bu görünümde bir şablon oluşturmak istiyorum. BöyleDjango'da çerez nasıl ayarlanır ve sonra şablon oluşturulur?

def index(request): 
    response = HttpResponse('blah') 
    response.set_cookie('id', 1) 
    return response 

Ancak, ben bir şablon oluşturmak sonra bir çerez bırakır ve gereken birşey:

def index(request, template): 
    response_obj = HttpResponse('blah') 
    response_obj.set_cookie('id', 1) 
    return render_to_response(template, response_obj) # <= Doesn't work 

şablon içerecektir Anladığım kadarıyla, bu bir çerez belirlemenin bir yoludur tıklandığında, ayarladıkları çerezi kontrol eden diğer görünümleri çalıştıracak bağlantılar. Yukarıdaki ikinci örnekte gösterdiğim şeyi yapmanın doğru yolu nedir? Şablonum için tüm HTML'yi içeren bir dizgi oluşturabileceğimi ve bu dizeyi HttpResponse argümanını iletebileceğimi anlıyorum, ancak bu gerçekten çirkin görünüyor. Bunu yapmanın daha iyi bir yolu yok mu? Teşekkürler.

cevap

11

Bu nasıl yapılacağını geçerli: şablon oluşturulmadan önce

from django.shortcuts import render 

def home(request, template): 
    response = render(request, template) # django.http.HttpResponse 
    response.set_cookie(key='id', value=1) 
    return response 
+4

İlk olarak bir HttpResponse örneğini başlatır, ancak onunla hiçbir şey yapmazsınız. "render", daha sonra çerezi ayarladığınız ve sonunda döndüğünüz aynı değişkene atadığınız bir yanıt döndürür. Cevabınız "response = HttpResponse()" satırı kaldırıldı. –

+1

Bir şeyi yanlış anlamış olabilirim, ancak "şablonu oluşturmadan önce bir çerez * nasıl ayarlanır?" Sorusu değildi. – vmonteco

-1
def index(request, template): 
    response = HttpResponse('blah') 
    response.set_cookie('id', 1) 
    id = request.COOKIES.get('id') 
    return render_to_response(template,{'cookie_id':id}) 
+0

ayarlamak veya değil. Ör: {% if cookie_id%} #links görüntülenecek {% endif%} – Manjunath

+0

Yanıt verdiğiniz için teşekkür ederiz. Ancak, bu doğru görünmüyor. Kodunuz, istekte 'id' adında bir çerez arıyor. Ancak, bu istek alındıktan sonra çerez oraya gitmeyecek şekilde ayarlanmıyor. – William

+0

Bunu yapmanın basit bir yolu, şablon oluşturulduğunda çerez oluşturduğunda, istemci tarafında bazı JavaScriptleri çalıştırmak olurdu. Ama yine de yukarıda sorduğum şeyin sunucu tarafında yapılıp yapılamayacağını merak ediyorum. – William

1

kabul cevap çerezi ayarlar. Bu çalışıyor.

response = HttpResponse() 
response.set_cookie("cookie_name", "cookie_value") 
response.write(template.render(context)) 
2

Eğer sadece şablon oluşturulurken ayarlanmasına çerez değerini gerekiyorsa, böyle bir şey deneyebilirsiniz:

Sonra şablonunda size çerez olmasına bağlı olarak bağlantıları gösterebilir
def view(request, template): 
    # Manually set the value you'll use for rendering 
    # (request.COOKIES is just a dictionnary) 
    request.COOKIES['key'] = 'val' 
    # Render the template with the manually set value 
    response = render(request, template) 
    # Actually set the cookie. 
    response.set_cookie('key', 'val') 

    return response 
İlgili konular