Расширение Swift 3 для UIWindow
public extension UIWindow {
func capture() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.frame.size, self.isOpaque, UIScreen.main.scale)
self.layer.render(in: UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}]
Я думаю, что Вы ищете это:
from django.db.models.loading import get_model
model = get_model('app_name', 'model_name')
существуют другие методы, конечно, но это - способ, которым я обработал бы его, если Вы не знаете, какой файл моделей необходимо импортировать в пространство имен. (Примечание нет действительно никакого способа безопасно получить модель без первого знания, какому приложению это принадлежит. Посмотрите на исходный код к loading.py, если Вы хотите протестировать свою удачу при итерации по моделям всех приложений.)
Обновление для Django 1.7 +: По словам Django временная шкала депрекации , django.db.models.loading
была удержана от использования в Django 1.7 и будет удалена в Django 1.9. Как указано в ответ Alasdair , В Django 1.7 +, существует реестр приложений. Можно использовать apps.get_model
метод для динамичного получения модели:
from django.apps import apps
MyModel = apps.get_model('app_label', 'MyModel')
from django.authx.models import User
model = User
model.objects.all()
модель = django.authx.models. Пользователь
? Django возвращает ошибку, "глобальное имя django не определяется".
Django не возвращает ошибку. Python делает.
Первый, НЕОБХОДИМО импортировать модель. Необходимо импортировать его с
from django.authx.models import User
119-секундный, если Вы получаете ошибку, которая django
не определяется, тогда Django не установлен правильно. У Вас должен быть Django на Вашем PYTHONPATH
или установленный в Вашем Python lib/site-packages.
Для установки Django правильно см. http://docs.djangoproject.com/en/dev/intro/install/#intro-install
Классы являются объектами "первого класса" в Python, означая, что они могут раздаваться и управляться точно так же, как все другие объекты.
Модели являются классами - можно сказать от того, что Вы создаете новые модели с помощью операторов класса:
class Person(models.Model):
last_name = models.CharField(max_length=64)
class AnthropomorphicBear(models.Model):
last_name = models.CharField(max_length=64)
И Person
и AnthropomorphicBear
идентификаторы связываются с классами Django, таким образом, можно раздать их. Это может полезный, если Вы хотите создать функции помощника, которые работают на образцовом уровне (и совместно используют единый интерфейс):
def print_obj_by_last_name(model, last_name):
model_name = model.__name__
matches = model.objects.filter(last_name=last_name).all()
print('{0}: {1!r}'.format(model_name, matches))
Так print_obj_by_last_name
будет работать или с Person
или с AnthropomorphicBear
модели. Просто передайте модель в подобном так:
print_obj_by_last_name(model=Person, last_name='Dole')
print_obj_by_last_name(model=AnthropomorphicBear, last_name='Fozzy')
Если Вам передали имя модели как строку, я предполагаю, что один путь мог бы быть
modelname = "User"
model = globals()[modelname]
, Но слоняющийся без дела с globals () могло бы быть немного опасным в некоторых контекстах. Так обращаться с осторожностью:)