Используйте секцию сценариев в макете представления и макета.
Поместите все ваши сценарии, определенные в вашем представлении, в разделе «Скрипты» представления. Таким образом, вы можете загрузить основную компоновку после загрузки всех других скриптов. Это настройка по умолчанию при запуске нового веб-проекта MVC5. Не знаю о более ранних версиях.
Просмотры / Foo / MyView.cshtml:
// The rest of your view code above here.
@section Scripts
{
// Either render the bundle defined with same name in BundleConfig.cs...
@Scripts.Render("~/bundles/myCustomBundle")
// ...or hard code the HTML.
<script src="URL-TO-CUSTOM-JS-FILE"></script>
<script type="text/javascript">
$(document).ready(function () {
// Do your custom javascript for this view here. Will be run after
// loading all the other scripts.
});
</script>
}
Просмотры / Shared / _Layout.cshtml
<html>
<body>
<!-- ... Rest of your layout file here ... -->
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
</html>
Обратите внимание, раздел scripts отображается последним в файле основного макета.
Сохраните результат вызова locals()
(или vars()
), чтобы вернуть локальную область функции. В противном случае locals()
внутри выражения генератора вернет локальную область gen-expr.
def test3():
lvar1 = 1
lvar2 = 2
lvar3 = 3
scope = locals()
myDict = dict((name, eval(name, scope)) for name in [
"lvar1", "lvar2", "lvar3"])
print(myDict["lvar1"])
BTW, создание словаря не требуется:
myDict = locals() # or vars()
Прежде всего важно прочитать это :
Аргумент выражения анализируется и оценивается как выражение Python (с технической точки зрения, список условий), используя глобалы и локальные словари как глобальное и локальное пространство имен. Если словарь globals присутствует и отсутствует
blockquote>‘__builtins__’
, текущие глобальные переменные копируются в глобалы до того, как выражение будет проанализировано. Это означает, что выражение обычно имеет полный доступ к стандартному модулю__builtin__
и распространяются ограниченные среды. Если словарь locals опущен, по умолчанию используется словарь глобалов. Если оба словаря опущены, выражение выполняется в среде, где вызываетсяeval()
. Возвращаемое значение является результатом оцененного выражения `.. Для начала важно отметить, что выражение генератора имеет свою собственную область действия (истинно также для понимания dict) следовательно, у него есть свой словарь
locals()
.
- Это сработало, потому что в глобальной области действия
globals()
иlocals()
dict указывает на тот же словарь, поэтому конструктор dict может получить доступ к этим переменным.- Здесь мы снова вызываем
eval()
безglobals()
иlocals()
dict, поэтому он заканчивается использованием глобальной области и собственной локальной области (пустой), и нет такой переменной, доступной в любой из этих областей.- Помните, что генераторы имеют свой собственный масштаб, поэтому вызов
locals()
здесь практически не имеет значения, это пустой dict.Решение:
def test1(): lvar1 = 1 lvar2 = 2 lvar3 = 3 test1_locals = locals() myDict = dict((name, eval(name, test1_locals)) for name in ["lvar1", "lvar2", "lvar3"]) print myDict print(myDict["lvar1"])
Это сработало, потому что мы захватили test1
locals()
в переменной, а затем использовали этот словарь внутри понимания словаря, поэтому теперь он имеет доступ к этим переменным.