2013-02-14 2 views
2

슬라이드 쇼를 진행하고 있으며 각 슬라이드의 URL 형식은 articles/1234#slide=5입니다. 내 url.py 파일의 URL에서 slide=5 부분을 검색 한 다음 해당보기 기능에 전달하고 마지막으로 템플릿에 전달하고 오른쪽 슬라이드를 렌더링합니다.장고에서 앵커를 식별하는 방법은 무엇입니까?

url(r'^(?P<article_id>\d+)#slide=(?P<current_slide>\d{1,2})$', 'articles.views.show_article') 

을하지만 URL에서 current_slide 변수를 얻을 수없는 것 같다 다음과 같이 URL 설정입니다. 서버에 전송되지 않았기 때문에 앵커 부분과 관련이있는 것 같습니다. 하지만 내 URL 설정에서 앵커 부분을 무시하고이 해시 태그를 처리하기 위해 javascript를 사용하면 브라우저에 URL을 입력 할 때마다 먼저 앵커 부분이없는 페이지가 렌더링 된 다음 원하는 오른쪽 슬라이드로 이동하는 것으로 보입니다. 오른쪽 슬라이드를 직접 렌더링 할 수 없습니다. 어떻게 해결할 수 있을까요?

+0

해시 태그가 아니라 앵커입니다. – Joe

답변

5

질문에 답했습니다. URL의 앵커 부분은 서버에 전달되지 않고 클라이언트 측에서만 사용됩니다. 왜 표준 GET 매개 변수를 사용하지 :

articles/1234?slide=5 

당신이 URL 형식으로 붙어 있기 때문에, 당신은이 질문에 jquery smooth scroll to an anchor?

에 대한 답변을이 덜 성가신 만들 수있는 몇 가지 종류의 애니메이션 스크롤을 사용하여 체크 아웃 할 수 있습니다
+0

처음부터이 작업을 수행하지 않고 다른 사람의 프로젝트에서 작업하고 있습니다. 이미이 해시 태그와 관련된 js 파일이 있습니다. 따라서이 해시 태그 형식을 고수하고이를 해결할 방법을 찾아야합니다. 해시 태그로이를 달성 할 수있는 방법이 있습니까? – chaonextdoor

+0

'해시 태그'가 잘못된 단어라는 점에 유의해야합니다.나는 당신의 질문에 답했습니다 (아래 참조). – Joe

2

브라우저에 "해시 태그"가 서버에 전송되지 않습니다.

일반적인 방법 중 하나는 javascript가로드/읽기시 해시 태그를 캡처하고 페이지를 초기화하는 함수 (ajax를 통해)를 호출하는 것입니다.

또한 일반적인 용어는 "hashbang url"입니다. 그 용어를 검색하면 더 많은 관련 정보를 찾을 수 있습니다.

#은 HTML 사양의 페이지 앵커를 가리키는 데 사용되므로 페이지가 튀어 나오고 있습니다. http://example.com/gallery/1234#slide5은 에 slide5 앵커로 이동합니다.

+0

서버가 해시 태그가 포함 된 응답을 클라이언트에 보내는 경우 읽는 방법은 무엇입니까? 자바 스크립트를 사용하지 않고? – Kalanamith

0

앵커 (# 뒤에 오는 비트)는 일치하는 URL 비트의 일부가 아닙니다. 페이지 내의 앵커 (즉, 링크)에 사용됩니다. 그것들은 일반적으로 브라우저의 이익을 위해 존재합니다 (그래서 브라우저는 페이지의 조금만 스크롤 할 수 있습니다). 서버가 아니라 사람들이 요즘 그들을 악용하는 것 같습니다. Django가 서버의 URL에서 유용한 부분으로 간주되지 않기 때문에 장고를 선택하지 않는 것은 놀라운 일이 아닙니다. 여기

는 HTML의 이전 스펙에서 문서이지만 여전히 유효 : http://www.w3.org/TR/html4/struct/links.html#h-12.2.3

그것을 할 방법 :

당신이 Request 객체에 보면,보기에이를 얻고 싶다면 . request.path_info 또는 request.path을 찾으십시오. 그러면 전체 URL이 제공됩니다. 정규식을 사용하여 거기에서 추출 할 수 있습니다.

import re 

input = "articles/1234#slide=5" 

m = re.search("#slide=([0-9]*)", input) 
try: 
    print int(m.group(1)) 
except ValueError: 
    print "didn't get a number" 

Rob이 말한대로 get 매개 변수를 사용해야합니다.

+2

일반적으로 서버로 전송되지 않기 때문에 요청 객체에서는 사용할 수 없습니다. –

+0

확인할 환경이 없지만 지정된 URL (앵커 조각 포함 가능)을 방문하면 전체 URL이 서버로 전달됩니다. 장고를 확인할 수는 없지만 매우 놀랍습니다. – Joe

+0

@DanielRoseman 네 말이 맞아. 방금 테스트를했고 요청 객체에서 앵커 부분을 볼 수 없습니다. – chaonextdoor

관련 문제