Django - 渲染存储在数据库字段中的变量

时间:2018-05-17 10:00:00

标签: python django

在我的应用程序中,我将要求用户输入一些带变量的文本并将其存储到数据库中。像这样...

Parameter

id |    para   |
---+-----------+
1  | 932580234 |
2  | 865234932 |

并且有一个表格,其中包含这些参数的实际值。

def userpage(request):
    url_obj = Url.objects.filter(id=..not_important...)[0]
    url = url_obj.url

    para1_obj = Parameter.objects.filter(..not_important..)[0]
    para1 = para1_obj.para

    para2_obj = Parameter.objects.filter(..not_important..)[0]
    para2 = para2_obj.para

    return render(request, 'userpage.html', {'url':url, 'para1':para1, 'para2':para2})

我想渲染一个html并替换它上面的{{para1}}或{{para2}}。

views.py

You URL is {{ url }}

模板/ userpage.html

You URL is http://example.com/?aaa=932580234

我的期望是

You URL is http://example.com/?aaa={{para1}}

但是,实际的html是

import { NgModule } from '@angular/core';
...
import { 
    MapModule, MapAPILoader, BingMapAPILoaderConfig, 
    BingMapAPILoader, WindowRef, DocumentRef, 
    MapServiceFactory, BingMapServiceFactory 
} from "angular-maps";
...

@NgModule({
imports: [
...
MapModule.forRootBing()
...
],
providers: [
...
  {
  provide: MapAPILoader, deps: [], useFactory: MapServiceProviderFactory
  }
...
]
})

如何在“return render ....”之前“预渲染”数据库中的字段? 或者还有其他解决方案吗?

我正在使用python 3.4和django 2.0

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以先将url构建为模板:

url_template = Template(url)

然后我们用给定的参数渲染它:

context = Context({'para1':para1, 'para2':para2})
our_url = url_template.render(context)

然后our_url被正确渲染,我们可以将其插入到我们的真实模板渲染中:

return render(request, 'userpage.html', {'url': our_url})

这意味着我们会得到类似的东西:

def userpage(request):
    url_obj = Url.objects.filter(id=..not_important...)[0]
    url = url_obj.url

    para1_obj = Parameter.objects.filter(..not_important..)[0]
    para1 = para1_obj.para

    para2_obj = Parameter.objects.filter(..not_important..)[0]
    para2 = para2_obj.para

    url_template = Template(url)
    context = Context({'para1':para1, 'para2':para2})
    our_url = url_template.render(context)
    return render(request, 'userpage.html', {'url': our_url})

请注意,如果您有一个相当大的参数表,则最好使用以下命令动态构造字典:

para_dict = {
    'para{}'.format(para.id): para.para
    for para in Parameter.objects.all()
}