Как я использую WAF для создания общей библиотеки?

Необходимо будет добавить __init__ метод к Action_Form для устанавливания начальных значений, не забывая звонить __init__ на основе ModelForm класс через [1 113] супер .

class Action_Form(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(Action_Form, self).__init__(*args, **kwargs)
        self.fields['from_company'].queryset = Contact.object.filter(...

, Если Вы планируете передать свои параметрические усилители фильтра как ключевое слово args к Action_Form, необходимо будет удалить их предшествующий вызов супер:

myfilter = kwargs['myfilter']
del kwargs['myfilter']

или, вероятно, лучше:

myfilter = kwargs.pop('myfilter')

Для получения дополнительной информации, вот другая ссылка, относящаяся к Динамический ModelForms в Django.

10
задан James Morris 20 October 2009 в 15:25
поделиться

1 ответ

Предполагая, что вы используете последнюю версию waf (1.5.9 на момент написания), подстановочные знаки можно указать с помощью метода glob () в сборке контекст. Таким образом, вы можете написать следующее:

bld.new_task_gen(
    features = 'cc cshlib',
    source = bld.glob('*.c'),
    target='mylib')

Если вы использовали старую версию waf, в которой нет glob, тогда вы можете использовать метод find_sources_in_dirs :

lib = bld.new_task_gen(
    features = 'cc cshlib',
    target = 'mylib')
lib.find_sources_in_dirs('.')

Этот метод все еще в Waf, но объявлена ​​устаревшей и может в конечном итоге исчезнуть.

Переменные srcdir и blddir теперь необязательны, поэтому они вам не нужны - они по умолчанию равны "." и все равно «строить». Вы не должны добавлять «lib» к имени цели, это делается автоматически в зависимости от платформы (в Windows библиотека не добавляется, а общие библиотеки используют .dll). Сборка отладки и выпуска - удивительно сложная проблема. Первоначально Waf включал эту функцию, но в какой-то момент она была удалена и больше никогда не добавлялась. Это обычный запрос в списке рассылки, поэтому он может появиться снова в будущем. Между тем вы можете сделать намного хуже, чем использовать модуль cflags gjc . Просто добавьте его в каталог своего проекта. Окончательный сценарий wscript будет выглядеть следующим образом:

VERSION='0.0.1'
APPNAME='mylib'

def set_options(opt):
    opt.tool_options('compiler_cc')
    opt.tool_options('cflags', tooldir='.')

def configure(conf):
    conf.check_tool('compiler_cc')
    conf.check_tool('cflags', tooldir='.')

def build(bld):
    bld.new_task_gen(
        features = 'cc cshlib',
        source = bld.glob('*.c'),
        target=APPNAME)

А чтобы настроить отладочную сборку, вы должны запустить следующее:

./waf configure -d debug

Если вы используете библиотеки в их собственных подкаталогах, тогда вам, вероятно, следует иметь wscript верхнего уровня и использовать bld.add_subdirs () метод добавления каталогов библиотек / программ. У каждого подкаталога будет свой собственный файл wscript_build.

6
ответ дан 4 December 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: