2012-12-14 21 views
1

在我的Django的網址,我有結尾的網址格式:Django的改變當前的URL名稱和參數

(redirect/(?P<redirect_to>\w+)) 

這意味着可以將這些網址(或沒有)的/redirect/TARGET/結束。這些URL模式有其他命名參數(主要是一個:pk

現在,我希望在這些URL模式使用的模板中能夠通過添加redirect_to參數來更改當前頁面路徑,並保持其他參數和URL反向名稱不變。

我能夠通過在當前上下文中添加resolve(path).url_name,然後將其與{% url %}模板標記一起使用,從而在模板中獲得URL反向名稱。

我想知道是否有任何簡單的方法來(從resolve(path).kwargs)的參數動態地添加到URL反向標籤?

+0

不知道,如果你想要這個'{%URL URL_NAME my_kwarg1 = 'any_value' my_kwarg2 = context_var%}'你的問題是混亂的。 –

+0

我不知道我明白你的意思。您是否打算將重定向邏輯添加到實際模板中? –

+0

我最初的目標是有三種不同的形式,在不同的地方每個重定向時提交表單。所以我需要有一種方法來獲取以/ redirect/FOO結尾的頁面中被更改的URL。在回答中給出的模板標籤做的工作,但最後我做了我必須使用組合的提交按鈕的名稱做(提交按鈕的名稱屬性爲空的關鍵當表單提交的服務器通過)並在基礎FormView中重寫get_success_url()。 – pistache

回答

1

我認爲你應該爲此創建一個custom tag(用{%url_redirect「your_new_destination」%}替換你的{%url%}標記)。

在your_app/templatetags/my_custom_tags.py

from django.core.urlresolvers import reverse, resolve 

@register.simple_tag(takes_context=True) 
def url_redirect(context, new_destination): 
    match = resolve(context.request.path) 
    match.kwargs['redirect_to'] = new_destination 
    return reverse(match.url_name, args=match.args, kwargs=match.kwargs) 
在你的模板

{% load my_custom_tags %} 
{% url_redirect "your_new_destination" %} 

請注意,您需要添加 'django.core.context_processors.request' 你TEMPLATE_CONTEXT_PROCESSORS爲了這個片段的工作。