2013-07-15 2 views
0

두 항목으로 각각 항목 요약과 항목 상세 정보를 표시하는 페이지가 있습니다. 이 같은 url.py :django - 동적 URL을 구성하는 방법

(r'^summary/$', 'views.summary'), 
(r'^summary_\d|[a-z]{24}$', 'views.itemInfo'), 

summary.html이 ID로 항목을 조회 할 수 있습니다 다음 항목의 상세 정보를 표시 할 수 summary_{{itemId}}.html로 이동합니다. itemId는 mongodb ObjectId이고 정규식 '\d|[a-z]{24}'을 사용합니다. summary.html 템플릿에서

나는 쓰기 :

<form action="???" method="post"> 
    query Item by id: 
    <input type="text" name="itemId" value="" /><br /> 
    <input type="submit" value="query" /> 
</form> 

내 문제 : 나는에 작성해야 무엇

  1. '???' 장소, 이동할 URL이 동적으로 형성됩니다.

  2. 어떻게 항목 정보를 표시하는 데 사용 된 템플릿 이름을 file(summary_{{itemId}}.html으로 했습니까?

답변

0

URL과 데이터 전달 방법 (POST, GET 등)은 중요한 두 가지를 혼합합니다. HTTP는 당신이 URL과 프레임 워크 (예 : Django)를 사용하여 계획 한 것과 같은 데이터를 수신하도록 만들어지지 않습니다. 그렇게하면 계속해서 작동합니다.

/summary /와 같은 페이지가 하나만 있어야합니다. POST 데이터에 itemId를 받았는지 확인하는보기로 링크해야합니다 (현재 HTML 스 니펫을 유지하는 경우). 그렇지 않은 경우 쿼리 양식 만 표시하십시오. 그렇지 않으면 템플릿 태그 나 필터를 사용하여 데이터를 표시하는 div 요소를 추가하십시오. 내장형 iftemplate tag이 유용 할 수 있습니다.

추가 보너스로 항목을 입력 할 때 검색 양식을 사용할 수 있으며 유지 관리 할 코드가 적습니다.

GET 방법으로 전환하는 것이 좋습니다. 원하는 방식으로 전환하는 것이 좋습니다. 그것은 귀하의 웹 사이트에 책갈피 항목을 사용자가 검색 양식뿐만 아니라 항목에 대한 참조를 유지할 수 있습니다.

+0

url.py는 "(r '^ summary/$', 'views.summary'), (r '^ summary/$', 'views.query'), 두 번째 페이지 만 사용합니다. 처리기 'views.query'는 호출되지 않습니다. 어떻게 해결할 수 있을까요? – jean

+0

사례에는 하나의보기 만 있어야합니다. 이 뷰에서 뷰에 전달 된 HttpRequest 매개 변수의 [querydict 객체] (https://docs.djangoproject.com/en/dev/ref/request-response/)에 조건문을 작성할 수 있습니다. 예를 들어, "request.ethost == 'POST'및 request.POST 및 'itemId'in request.POST :"의 경우 두 개의 뷰를 분리 할 수 ​​있습니다. – Soravux

1

URL에서 id를 잡기 위해 먼저 URL을 수정

(r'^summary/(?P<id>\d|[a-z]{24})/$', 'views.itemInfo', name="item_info"), 

요약보기 체크 형태의 액션

action="{% url 'views.summary' %}" 

에서 같은 요약 URL을 넣어 요청이 POST 요청이 다음 잡아 경우 ID가 GET이거나 id 인 경우 상세보기로 리디렉션 POST 요약보기 다시보기 :

def summary(request): 
    if request.method == 'POST': 
     id = request.POST.get('itemId') 
     if id: 
      return redirect(reverse('item_info', kwargs={'id': id})) 
    return render_to_response(
     'summary.html', {}, context_instance=RequestContext(request)) 

세부 정보보기는 항목을 ID로 쿼리하고 컨텍스트에서 항목을 전달해야합니다. 당신은 하나의 템플릿을 사용하여 다른 항목을 표시 객체 인스턴스를 item_detail.html으로 템플릿의 이름을 지정하고 전달합니다

def itemInfo(request, id): 
    item = MyItemModel.objects.get(id=id) 
    return render_to_response(
     'item_detail.html', {'item': item}, context_instance=RequestContext(request)) 

지금 item_detail.htmlitem 재생합니다.

희망이 도움이됩니다.imports 자신을 돌봐주세요.

관련 문제