在我...
if mymodel.name == 'Myname1':
#do something
elif mymodel.name == 'Myname2':
#do something else
...
我有类似的事情:
Myname
但我不喜欢它,因为如果hardcoded_words.py
更改我应该搜索我的所有代码来更正它,所以我创建了一个文件,我保留所有这些词:
myname1='Myname1'
myname1='Myname2'
myname1='Myname3'
...
:
views.py
和我的from myapp import hardcoded_words
...
if mymodel.name==hardcoded_words.myname1:
#do something
elif mymodel.name==hardcoded_words.myname2:
#do something else
...
成为:
hardcoded_words.py
如果Myname1发生变化,我只需更正一个文件:
...
myname1='Myname1_b'
...
:
function myfunction1(myvariable1, myvariable2) {
switch (myvariable1) {
case 'Myname1':
//do something
break;
case 'Myname2':
//do something else
break;
...
也许有更好的方式(可以随意告诉),但问题在于Javascript。有办法做这样的事情吗?
我的javascript.js:
#input tag for search box
<input type="search" placeholder="search" class="search_3">
<a href="https:.........?searchname=">
#input tag for search button
<input type="submit" class="submit_3" value="Search"/>
</a>
感谢您的帮助
答案 0 :(得分:2)
如果你真的需要在javascript中使用相同的列表,那么我建议创建一个可以从AJAX请求中调用的视图,它将返回存储所有这些值的python字典。这样就没有任何重复和地方你需要两次更新相同的东西(DRY)。
然后,简单地说,在您的逻辑需要使用它的区域中,确保在使用这些值之前调用此视图。
理想情况下,您可能需要查看此处涉及的逻辑,看看是否真的需要“魔术”字符串。
答案 1 :(得分:1)
您可以在JS中执行完全相同的操作,只需使用Object创建一个单独的文件,该文件将托管您的键值。
取决于您使用的JS规范,您可以这样做:
ES6:
export const hardcoded_words = {
myname1: 'Myname1',
myname1: 'Myname2',
myname1: 'Myname3'
}
ES5:
window.hardcoded_words = {
myname1: 'Myname1',
myname1: 'Myname2',
myname1: 'Myname3'
}
答案 2 :(得分:1)
我会说将你的硬编码词重构成这样的词典会更好:
name_mappings = {'myname1'='Myname1'
'myname1'='Myname2'
'myname1'='Myname3'}
为了能够将它导入到简单的Django视图中,您将通过类似/api/get_name_mappings/
的URL通过AJAX访问。
因为在这种情况下,你只会有一个词汇&#39;而且你不需要在后端和前端维护它。而且如果你想添加一些更复杂的逻辑,最好还是在一方 - 服务器端。
这种方法可能不方便的唯一情况 - 当你想为你的javascript进行单元测试时。在这种情况下,你需要制作一些js-mocks。
但我同意@Sayse,无论如何这种方式更好更清晰。