Django

Code

Changeset 1395

Show
Ignore:
Timestamp:
11/23/05 22:58:46 (3 years ago)
Author:
adrian
Message:

new-admin: Negligible formatting changes to admin.templatetgas.admin_modify and template.decorators

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/new-admin/django/contrib/admin/templatetags/admin_modify.py

    r1286 r1395  
    11from django.core import template, template_loader, meta 
    2 from django.core.template_loader import render_to_string 
    3 from django.conf.settings import ADMIN_MEDIA_PREFIX 
     2from django.utils.html import escape 
    43from django.utils.text import capfirst 
    5 from django.utils.html import escape 
    64from django.utils.functional import curry 
    75from django.core.template.decorators import simple_tag, inclusion_tag 
     
    97from django.core.meta.fields import BoundField, Field 
    108from django.core.meta import BoundRelatedObject, TABULAR, STACKED 
    11  
     9from django.conf.settings import ADMIN_MEDIA_PREFIX 
    1210import re 
    1311 
     
    1513 
    1614def class_name_to_underscored(name): 
    17     return '_'.join([ s.lower() for s in word_re.findall(name)[:-1] ]) 
    18  
    19 #@simple_tag         
     15    return '_'.join([s.lower() for s in word_re.findall(name)[:-1]]) 
     16 
     17#@simple_tag 
    2018def include_admin_script(script_path): 
    21         return '<script type="text/javascript" src="%s%s"></script>' % \ 
    22             (ADMIN_MEDIA_PREFIX, script_path) 
    23 include_admin_script = simple_tag(include_admin_script)           
    24  
     19    return '<script type="text/javascript" src="%s%s"></script>' % (ADMIN_MEDIA_PREFIX, script_path) 
     20include_admin_script = simple_tag(include_admin_script) 
    2521 
    2622#@inclusion_tag('admin/submit_line', takes_context=True) 
     
    3228    is_popup = context['is_popup'] 
    3329    return { 
    34         'onclick_attrib' : (bound_manipulator.ordered_objects and change  
    35                             and 'onclick="submitOrderForm();"' or ''),  
    36         'show_delete_link' : (not is_popup and has_delete_permission  
    37                               and (change or show_delete)),  
    38         'show_save_as_new' : not is_popup and change and bound_manipulator.save_as, 
     30        'onclick_attrib': (bound_manipulator.ordered_objects and change 
     31                            and 'onclick="submitOrderForm();"' or ''), 
     32        'show_delete_link': (not is_popup and has_delete_permission 
     33                              and (change or show_delete)), 
     34        'show_save_as_new': not is_popup and change and bound_manipulator.save_as, 
    3935        'show_save_and_add_another': not is_popup and (not bound_manipulator.save_as or add), 
    4036        'show_save_and_continue': not is_popup, 
     
    5551            class_names.append('inline') 
    5652        colon = ":" 
    57      
    5853    class_str = class_names and ' class="%s"' % ' '.join(class_names) or '' 
    59     return '<label for="%s"%s>%s%s</label> ' % \ 
    60             (bound_field.element_id, class_str,  
    61              capfirst(bound_field.field.verbose_name), colon ) 
     54    return '<label for="%s"%s>%s%s</label> ' % (bound_field.element_id, class_str, \ 
     55        capfirst(bound_field.field.verbose_name), colon) 
    6256field_label = simple_tag(field_label) 
    63  
    6457 
    6558class FieldWidgetNode(template.Node): 
    6659    nodelists = {} 
    6760    default = None 
    68      
     61 
    6962    def __init__(self, bound_field_var): 
    7063        self.bound_field_var = bound_field_var 
     
    8578                        cls.default = template_loader.get_template("widget/default").nodelist 
    8679                    nodelist = cls.default 
    87              
     80 
    8881            cls.nodelists[klass] = nodelist 
    8982            return nodelist 
    9083        else: 
    9184            return cls.nodelists[klass] 
    92     get_nodelist = classmethod(get_nodelist)        
    93              
     85    get_nodelist = classmethod(get_nodelist) 
     86 
    9487    def render(self, context): 
    95      
    9688        bound_field = template.resolve_variable(self.bound_field_var, context) 
    97          
     89 
    9890        context.push() 
    9991        context['bound_field'] = bound_field 
    100          
     92 
    10193        output = self.get_nodelist(bound_field.field.__class__).render(context) 
    10294        context.pop() 
     
    115107    def use_raw_id_admin(self): 
    116108         return isinstance(self.field.rel, (meta.ManyToOne, meta.ManyToMany)) \ 
    117                 and self.field.rel.raw_id_admin 
     109            and self.field.rel.raw_id_admin 
    118110 
    119111class FormFieldCollectionWrapper(object): 
     
    121113        self.field_mapping = field_mapping 
    122114        self.fields = fields 
    123         self.bound_fields = [AdminBoundField(field, self.field_mapping, field_mapping['original'])  
    124                              for field in self.fields
    125                               
     115        self.bound_fields = [AdminBoundField(field, self.field_mapping, field_mapping['original']) 
     116                             for field in self.fields
     117 
    126118class TabularBoundRelatedObject(BoundRelatedObject): 
    127119    def __init__(self, related_object, field_mapping, original): 
    128120        super(TabularBoundRelatedObject, self).__init__(related_object, field_mapping, original) 
    129121        self.field_wrapper_list = [FieldWrapper(field) for field in self.relation.editable_fields()] 
    130          
     122 
    131123        fields = self.relation.editable_fields() 
    132          
    133         self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping ,fields)  
    134                                                    for field_mapping in self.field_mappings]  
    135         self.original_row_needed = max([fw.use_raw_id_admin() for fw in self.field_wrapper_list])  
     124 
     125        self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping, fields) 
     126                                               for field_mapping in self.field_mappings] 
     127        self.original_row_needed = max([fw.use_raw_id_admin() for fw in self.field_wrapper_list]) 
    136128        self.show_url = original and hasattr(self.relation.opts, 'get_absolute_url') 
    137129 
    138130    def template_name(self): 
    139131        return "admin/edit_inline_tabular" 
    140          
     132 
    141133class StackedBoundRelatedObject(BoundRelatedObject): 
    142134    def __init__(self, related_object, field_mapping, original): 
    143135        super(StackedBoundRelatedObject, self).__init__(related_object, field_mapping, original) 
    144136        fields = self.relation.editable_fields() 
    145         self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping ,fields)  
    146                                                    for field_mapping in self.field_mappings]  
     137        self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping ,fields) 
     138                                               for field_mapping in self.field_mappings] 
    147139        self.show_url = original and hasattr(self.relation.opts, 'get_absolute_url') 
    148                                                     
     140 
    149141    def template_name(self): 
    150142        return "admin/edit_inline_stacked" 
    151      
     143 
    152144bound_related_object_overrides = { 
    153     TABULAR : TabularBoundRelatedObject, 
    154     STACKED : StackedBoundRelatedObject 
     145    TABULAR: TabularBoundRelatedObject, 
     146    STACKED: StackedBoundRelatedObject, 
    155147} 
    156148 
     
    158150    def __init__(self, rel_var): 
    159151        self.rel_var = rel_var 
    160      
     152 
    161153    def render(self, context): 
    162154        relation = template.resolve_variable(self.rel_var, context) 
     
    166158        klass = relation.field.rel.edit_inline 
    167159        bound_related_object_class = bound_related_object_overrides.get(klass, klass) 
    168          
     160 
    169161        original = context.get('original', None) 
    170          
    171         bound_related_object = relation.bind(context['form'], original, bound_related_object_class)  
     162 
     163        bound_related_object = relation.bind(context['form'], original, bound_related_object_class) 
    172164        context['bound_related_object'] = bound_related_object 
    173          
    174         t = template_loader.get_template( bound_related_object.template_name()
    175          
     165 
     166        t = template_loader.get_template(bound_related_object.template_name()
     167 
    176168        output = t.render(context) 
    177           
     169 
    178170        context.pop() 
    179171        return output 
    180  
    181172 
    182173#@simple_tag 
     
    184175    return ''.join([str(f) for f in form_fields]) 
    185176output_all = simple_tag(output_all) 
    186  
    187177 
    188178#@simple_tag 
     
    191181        t = [] 
    192182        if change: 
    193             t.append('document.getElementById("id_%s")._changed = true;' % field.name
    194         else:  
     183            t.append('document.getElementById("id_%s")._changed = true;' % field.name
     184        else: 
    195185            t.append('document.getElementById("id_%s").onchange = function() { this._changed = true; };' % field.name) 
    196186 
     
    200190                     ' var e = document.getElementById("id_%s");' \ 
    201191                     ' if(!e._changed) { e.value = URLify(%s, %s);} }; ' % ( 
    202                      f, field.name, add_values, field.maxlength)
     192                     f, field.name, add_values, field.maxlength)
    203193    return ''.join(t) 
    204194auto_populated_field_script = simple_tag(auto_populated_field_script) 
     
    206196#@simple_tag 
    207197def filter_interface_script_maybe(bound_field): 
    208     f = bound_field.field  
     198    f = bound_field.field 
    209199    if f.rel and isinstance(f.rel, meta.ManyToMany) and f.rel.filter_interface: 
    210200       return '<script type="text/javascript">addEvent(window, "load", function(e) {' \ 
    211201              ' SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % ( 
    212               f.name, f.verbose_name, f.rel.filter_interface-1, ADMIN_MEDIA_PREFIX)  
    213     else:  
     202              f.name, f.verbose_name, f.rel.filter_interface-1, ADMIN_MEDIA_PREFIX) 
     203    else: 
    214204        return '' 
    215205filter_interface_script_maybe = simple_tag(filter_interface_script_maybe) 
     
    221211    return node_factory(tokens[1]) 
    222212 
    223  
    224 one_arg_tag_nodes = [ 
    225     FieldWidgetNode,  
    226     EditInlineNode,  
    227 ] 
    228  
    229  
    230213def register_one_arg_tag(node): 
    231214    tag_name = class_name_to_underscored(node.__name__) 
     
    233216    template.register_tag(tag_name, parse_func) 
    234217 
     218one_arg_tag_nodes = ( 
     219    FieldWidgetNode, 
     220    EditInlineNode, 
     221) 
     222 
    235223for node in one_arg_tag_nodes: 
    236     register_one_arg_tag(node)     
    237  
     224    register_one_arg_tag(node) 
    238225 
    239226#@inclusion_tag('admin/field_line', takes_context=True) 
    240227def admin_field_line(context, argument_val): 
    241228    if (isinstance(argument_val, BoundField)): 
    242         bound_fields = [argument_val]  
     229        bound_fields = [argument_val] 
    243230    else: 
    244231        bound_fields = [bf for bf in argument_val] 
    245232    add = context['add'] 
    246233    change = context['change'] 
    247     
     234 
    248235    class_names = ['form-row'] 
    249     for bound_field in bound_fields:  
     236    for bound_field in bound_fields: 
    250237        for f in bound_field.form_fields: 
    251238            if f.errors(): 
    252239                class_names.append('errors') 
    253240                break 
    254        
     241 
    255242    # Assumes BooleanFields won't be stacked next to each other! 
    256243    if isinstance(bound_fields[0].field, meta.BooleanField): 
     
    258245 
    259246    return { 
    260         'add' : context['add'], 
    261         'change' : context['change'], 
    262         'bound_fields' :  bound_fields,  
    263         'class_names' : " ".join(class_names) 
     247        'add': context['add'], 
     248        'change': context['change'], 
     249        'bound_fields':  bound_fields, 
     250        'class_names': " ".join(class_names), 
    264251    } 
    265252admin_field_line = inclusion_tag('admin/field_line', takes_context=True)(admin_field_line) 
     
    268255def object_pk(bound_manip, ordered_obj): 
    269256    return bound_manip.get_ordered_object_pk(ordered_obj) 
    270      
     257 
    271258object_pk = simple_tag(object_pk) 
  • django/branches/new-admin/django/core/template/decorators.py

    r883 r1395  
     1from django.core.template import Context, Node, TemplateSyntaxError, register_tag, resolve_variable 
     2from django.core.template_loader import get_template 
     3from django.utils.functional import curry 
    14from inspect import getargspec 
    2 from django.core.template import Context, Node, TemplateSyntaxError, register_tag, resolve_variable 
    3 from django.core.template_loader import render_to_string, get_template 
    4 from django.utils.functional import curry 
    55 
    6 def gen_compile_func(params, defaults, name, node_class, parser, token): 
    7     #look in tags for 
     6def generic_tag_compiler(params, defaults, name, node_class, parser, token): 
     7    "Returns a template.Node subclass." 
    88    bits = token.contents.split()[1:] 
    99    bmax = len(params) 
    1010    def_len = defaults and len(defaults) or 0 
    1111    bmin = bmax - def_len 
    12     if( len(bits) < bmin or len(bits) > bmax  ): 
     12    if(len(bits) < bmin or len(bits) > bmax): 
    1313        if bmin == bmax: 
    1414            message = "%s takes %s arguments" % (name, bmin) 
    1515        else: 
    1616            message = "%s takes between %s and %s arguments" % (name, bmin, bmax) 
    17         raise TemplateSyntaxError(message) 
     17        raise TemplateSyntaxError, message 
    1818    return node_class(bits) 
    1919 
     20def simple_tag(func): 
     21    (params, xx, xxx, defaults) = getargspec(func) 
    2022 
    21 def simple_tag(func): 
    22     (params,_, _, defaults) = getargspec(func) 
    2323    class SimpleNode(Node): 
    2424        def __init__(self, vars_to_resolve): 
    25             #get the vars to resolve 
    26             self.vars_to_resolve = vars_to_resolve     
     25            self.vars_to_resolve = vars_to_resolve 
    2726 
    2827        def render(self, context): 
    29             resolved_vars = [resolve_variable(var, context)  
    30                               for var in self.vars_to_resolve] 
     28            resolved_vars = [resolve_variable(var, context) for var in self.vars_to_resolve] 
    3129            return func(*resolved_vars) 
    32     compile_func = curry(gen_compile_func, params, defaults, func.__name__, SimpleNode) 
     30 
     31    compile_func = curry(generic_tag_compiler, params, defaults, func.__name__, SimpleNode) 
    3332    compile_func.__doc__ = func.__doc__ 
    3433    register_tag(func.__name__, compile_func) 
    3534    return func 
    3635 
    37  
    3836def inclusion_tag(file_name, context_class=Context, takes_context=False): 
    3937    def dec(func): 
    40         (params,_, _, defaults) = getargspec(func) 
     38        (params, xx, xxx, defaults) = getargspec(func) 
    4139        if takes_context: 
    4240            if params[0] == 'context': 
    4341                params = params[1:] 
    4442            else: 
    45                 raise TemplateSyntaxError("Any tag function decorated with takes_context=True must have a first argument of 'context'" ) 
     43                raise TemplateSyntaxError, "Any tag function decorated with takes_context=True must have a first argument of 'context'" 
     44 
    4645        class InclusionNode(Node): 
    4746            def __init__(self, vars_to_resolve): 
     
    4948 
    5049            def render(self, context): 
    51                 resolved_vars = [resolve_variable(var, context) 
    52                                  for var in self.vars_to_resolve] 
     50                resolved_vars = [resolve_variable(var, context) for var in self.vars_to_resolve] 
    5351                if takes_context: 
    5452                    args = [context] + resolved_vars 
     
    5755 
    5856                dict = func(*args) 
    59                  
     57 
    6058                if not getattr(self, 'nodelist', False): 
    6159                    t = get_template(file_name) 
     
    6361                return self.nodelist.render(context_class(dict)) 
    6462 
    65         compile_func = curry(gen_compile_func, params, defaults, func.__name__, InclusionNode) 
     63        compile_func = curry(generic_tag_compiler, params, defaults, func.__name__, InclusionNode) 
    6664        compile_func.__doc__ = func.__doc__ 
    6765        register_tag(func.__name__, compile_func) 
    6866        return func 
    6967    return dec 
    70