Django提取值并在另一个页面中使它们成为占位符

Posted

技术标签:

【中文标题】Django提取值并在另一个页面中使它们成为占位符【英文标题】:Django extracting values and making them placeholders in another page 【发布时间】:2018-12-05 15:24:02 【问题描述】:

所以在我的第一个网页上,我有一个提交按钮,其中包含值标签中我需要的一系列信息。

<button type="submit" name="editEntry" value="[ entry.id ,  entry.first_name ,  entry.last_name ,  entry.country ,  entry.city ,  entry.salary ]">Edit</button>

在我的view.py中,我为value标签中的每个提取信息设置了变量。

def post(self, request):
    form = AddUser(request.POST or None)

    context =  'form': form 
    if 'editEntry' in request.POST:
        values = request.POST['editEntry']
        id_num = values[0]
        first_name = values[1]
        last_name = values[2]
        country = values[3]
        city = values[4]
        salary = values[5]

    return redirect('/edit')

现在在我的编辑页面中我有一些输入标签

<input type="hidden" name="id_num" value="">
<input type="text" name="first_name" placeholder="First Name" value="">
<input type="text" name="last_name" placeholder="Last Name" value="">
<input type="text" name="city" placeholder="City" value="">
<input type="text" name="country" placeholder="Country" value="">
<input type="text" name="salary" placeholder="salary" value="">

如何获取从第一个网页中获得的变量,并将它们作为值放入编辑页面的输入标签中?

【问题讨论】:

【参考方案1】:

如果您只想将一些值从一个页面传递到另一个页面,request.sessions 将是最佳解决方案。

def post(self, request):
    form = AddUser(request.POST or None)
    request.session['form_detail'] =   # create session
    context =  'form': form 
    if 'editEntry' in request.POST:
        values = request.POST['editEntry']
        request.session['form_detail']['id_num'] = values[0]
        request.session['form_detail']['first_name'] = values[1]
        request.session['form_detail']['last_name'] = values[2]
        request.session['form_detail']['country'] = values[3]
        request.session['form_detail']['city'] = values[4]
        request.session['form_detail']['salary'] = values[5]

    return redirect('/edit')

然后在模板中你可以调用这些存储在会话中的值

% with session=request.session.form_detail %
<input type="hidden" name="id_num" value=" session.id_num ">
<input type="text" name="first_name" placeholder="First Name" value=" session.first_name ">
<input type="text" name="last_name" placeholder="Last Name" value=" session.last_name ">
<input type="text" name="city" placeholder="City" value=" session.city ">
<input type="text" name="country" placeholder="Country" value=" session.country ">
<input type="text" name="salary" placeholder="salary" value=" session.salary ">
% endwith %

【讨论】:

【参考方案2】:

自从发布 django 1.2 以来,您无法通过重定向传递上下文。您可以进行 hack。我不是这个的忠实粉丝。

def post(自我,请求): form = AddUser(request.POST or None)

context =  'form': form 
if 'editEntry' in request.POST:
    values = request.POST['editEntry']
    id_num = values[0]
    first_name = values[1]
    last_name = values[2]
    country = values[3]
    city = values[4]
    salary = values[5]
    redirect_url = '/edit?'+'value='+values+'&id_num='+id_num+'&first_name='+first_name+'&last_name='+last_name+'&country='+country+'&city='+city+'&salary='+salary 
    return redirect(redirect_url)

这就是想法。请检查网址是否正确形成。一旦你在 url 中有这些,你可以很容易地提取它们,如下所示:

function get_url_params(param)
    main_dict=
    arr=window.location.href.split('?')[1].split('&') 
    for(var i=0; i<arr.length;i++)
        main_dict[arr[i].split('=')[0]] = arr[i].split('=')[1];
    
    return main_dict[param])

定义此函数后,您可以:

var first_name = get_url_params('first_name');
document.getElementsByName('first_name')[0].value = first_name

对其余参数执行此操作。

【讨论】:

那么如何提取重定向url信息放入输入值标签?还有一种方法可以在 django 1.3 中执行此操作吗? window.location.href.split('?')[1].split('&') 这将为您提供键值对数组。拆分该数组的每个元素以获取键和值。 function get_url_params(param) main_dict= // console.log(param); arr=window.location.href.split('?')[1].split('&') for(var i=0; i 上面的函数可以帮助你获取参数。示例:get_url_param('country'); 无论如何用模板语言来做这个?

以上是关于Django提取值并在另一个页面中使它们成为占位符的主要内容,如果未能解决你的问题,请参考以下文章

用占位符替换字符串并在函数之后将它们替换回来。

Python:提取唯一索引值并在循环中使用它们

GrapQHL Apollo Server,提取值并在解析器中使用它们

Django-CMS - 全球占位符?

Django CMS 管理模板页面中的占位符

重置 select2 值并显示占位符