2017-12-29 105 views
0

사용자의 친구 목록에 친구를 추가하는 기능을 만들고 있습니다. 사용자가 버튼을 클릭하면 우정이 만들어지고 페이지는 사용자가 있던 곳으로 리디렉션됩니다. 예를 들어 포럼의 첫 번째 페이지에 다른 사용자를 추가하고 싶다면 "친구 추가"버튼을 클릭 한 후 같은 페이지에 있어야합니다.Django - 이전 페이지로 리디렉션

이것은 내가 그것을 설계하는 방법입니다

def to_post_page(request, post_id, page_nr): 
    post = get_object_or_404(Post, id=post_id) 
    form = CommentForm() 
    comments = Comment.objects.filter(post=post) 
    return render(request, 'post/post.html', { 
     'post': post, 
     'form': form, 
     'comments': comments, 
     'page_nr': int(page_nr), 
     'user': request.user, 
     'path': request.path, 
    }) 

그리고 템플릿 : 나는 포럼의 모든 페이지로 리디렉션 할 때 , 나는 페이지에 변수로 현재 페이지의 경로를 통과

<input type="button" class="btn btn-info" value="Add Friend" onclick="location.href='{% url 'user:add_friend' to_friend_id=post.poster.id path=path %}';"> 

@login_required(login_url='user:login') 
def friend_add(request, to_friend_id, path): 
    friend = get_object_or_404(User, id=to_friend_id) 
    if friend == request.user: 
     return HttpResponseRedirect(request.path) 

    friendship = FriendShip(
     from_friend=request.user, 
     to_friend=friend 
    ) 

    try: 
     friendship.save() 
    except IntegrityError: 
     return path 
    finally: 
     return path 

내 URL은 다음과 같습니다

url(r'^add_friend/(?P<to_friend_id>[0-9]+/)/(?P<path>[\w\-]+)/$', views.friend_add, name="add_friend"), 

그것은 예외가 발생 :

키워드 인수 '{'to_friend_id ': 1,'path ':'/ forum/1/0/post '}'이 (가) 없으면 'add_friend'에 대해 반대입니다. 1 패턴을 시도했습니다 : [ '사용자/add_friend/(? P [0-9] + /)/(? P [\ w \ -] +) $']

예외가 제기 된 이유와 해결책은 무엇입니까? \ w는 문자열 매개 변수 용으로 설계되지 않았습니까?

그리고 이전 페이지로 리디렉션하는 방법은별로 똑똑하지 않다고 생각합니다. 어떤 사람이 더 좋은 방법이 있습니까?

정말 고마워요!

그는 양식을 사용하고 있기 때문에 질문은 this question으로 중복되지 않지만 나는 아닙니다. POST를받을 방법이 없습니다.

+0

[POST 요청 후 장고에서 이전 페이지로 리디렉션하는 방법] 가능한 복제본 (https://stackoverflow.com/questions/35796195/how-to-redirect-to-previous-page-in-django-after- post-request) –

+0

응답은 다음을 반환합니다. ==>'HttpResponseRedirect (request.META.get ('HTTP_REFERER', '/'))' –

+0

@mohammedqudah 다시 대답 할 수 있습니까? 나는 너의 대답을 받아 들일 것이다! –

답변

0

방울 /to_friend 정규식으로 끝까지 넣을 수 있습니다.

\w (영숫자 : [0-9a-zA-Z_])에 포함되어 있지 않으므로 ~ path 정규 표현식 부분을 추가하십시오.

이 작동합니다 :에서 또한

url(r'^add_friend/(?P<to_friend_id>[0-9]+)/(?P<path>[\w\-/]+)/$', views.friend_add, name="add_friend"), 

당신의 friend_add 방금 ​​결국 path을 반환 할 수 없습니다. HttpResponseRedirect에 동봉하십시오.

+0

아니, 대답은이 반환합니다 ==>'HttpResponseRedirect (request.META.get ('HTTP_REFERER', '/'))' –

+0

@ mohammedqudah 그래서 내가 정규식 문제에 대한 그의 질문에 대답했다는 사실에 관계없이 싫어했다. ? 좋은 – bellum

+0

실제로 나는 당신의 해결책을 시도했다, 작동하지 않는다. 그러나 당신의 도움을 아직도 평가하십시오! –