2012-06-01 6 views
-1

내 views.py을 extra_context에 "redirect_to"방법을 전달하는 방법 :장고 파이썬에서

form.py에서
@login_required 
def some_views(request): 
    if request.method == 'POST': 
     form = AddressCreateFrom(request.POST) 
     if form.is_valid(): 
      name = form.cleaned_data['Address'] 
      ip_value = form.cleaned_data['value'] 
      user_list = get_username(name) 
      address_create = form.save() 
      extra_context = { 
       'user_list': user_list 
       } 
      return redirect_to(request, url=address_create.get_absolute_url()) 
    else: 
     form = AddressCreateFrom() 
    extra_context = { 
     'form':AddressCreateFrom(initial={'user': request.user.pk}) 
     } 
    return direct_to_template(request,'networks/user_form.html',extra_context) 

: 당신은 내가 함께 Djang 모델 양식을 사용하고 있음을 보듯

class AddressCreateFrom(forms.ModelForm): 
    Address = forms.CharField(max_length=40) 
    value = forms.CharField(max_length=40) 
    class Meta: 
     model = Network 
     widgets = { 
      'user': forms.HiddenInput() 
      } 

두 여분의 Django 폼 필드 즉 Address and valueAddressCreateForm 클래스입니다. 템플릿을 렌더링 할 때 모든 필드가 필요합니다.

는 사실 some_views 방법은 잘 작동하지만 난 또한 요청 URLaddress_create.get_absolute_url()context_dictionaryuser_list에 기록 된 몇 가지 여분의 데이터를 렌더링합니다.

내가 잘못하지 않았다면 데이터베이스로 처리하는 경우 redirect_to 메서드를 사용해야합니다. 그렇게 할 수 있습니까? 당신이 extra_context를 통과 할 수 있도록

301 MOVED PERMANENTLY 
Location: http://www.example.com/new-url/ 

가 원래보기로 렌더링에는 템플릿이 없습니다 :

+0

정확히 무엇을하려합니까? extra_context는 무엇을위한 것입니까? 리디렉션에 어떤 종류의 컨텍스트가 필요한 이유는 무엇입니까? –

+0

@DanielRoseman 네트워크 모델 필드가있는 uesr_list 변수 (목록 데이터 형식)를 템플릿에 전달하려고합니다. *** 주소 및 ip_value *** 필드를 기반으로 일부 계산을 수행 한 후이 user_list가 표시됩니다. 내가 이런 식으로한다면 *** user_list *** 변수를 "WHAT"에 대한 템플릿 –

+0

-1로 렌더링 할 수 없습니다. 나는 속임수를 요구하고 있었다. 질문이 잘못 되었습니까 –

답변

3

상태 코드 (301) 또는 (302), 및 위치와 HTTP 응답을 반환하는 리디렉션에 리디렉션 그것.

사용자 브라우저는 일반적으로 리디렉션을 따르고 새 URL을 요청합니다.

  1. 사용자 ID를 포함하도록 URL 패턴을 설계, 예를 들면 : 당신이 다음보기에서 특정 사용자에 대한 정보를 표시하려면

    , 당신은 같은 뭔가를해야 /users/200/,

  2. 은 get 매개 변수로이를 포함합니다. /users/?id=200, then fetch the user id from request.GET`을 클릭하십시오.
  3. 세션에 user_id를 저장하십시오.
  4. 리디렉션 전에 사용자 데이터를 사용하여 messages framework을 사용하여 메시지를 작성하십시오.

그런 다음 리디렉션되는보기에서 데이터베이스에서 사용자를 가져 와서 템플릿 컨텍스트에 추가 할 수 있습니다.

1

컨텍스트, 추가 컨텍스트 및 POST 데이터는 리디렉션에서 살아남지 못합니다.

다음은 수행 할 수있는 작업입니다.

# before the redirect 
.... 
request.session['user_list'] = user_list 
return redirect_to(request, url=address_create.get_absolute_url()) 

# after the redirect (in the views.py that handles your redirect) 
.... 
user_list = request.session['user_list'] 
extra_context = { 'user_list': user_list } 
.... 
# now you have the user_list in the extra_context and can send it to the rendering engine. 

참고 :이 솔루션은 자신의 서버에서 리디렉션 작동합니다.