2016-07-29 4 views
9

मैं एक छोटी सी स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो कुछ PHP बॉयलरप्लेट को स्वचालित करेगी जिसे मुझे लिखने की आवश्यकता है। इसे fields सूची में प्रत्येक dict के लिए भरे विभिन्न प्रतिस्थापन फ़ील्ड के साथ आउटपुट फ़ाइल में स्ट्रिंग code की एक प्रति लिखनी चाहिए।स्ट्रिंग स्वरूपण करते समय फ़ील्ड नाम में अप्रत्याशित '{'

हालांकि, मैं त्रुटि हो रही है:

Traceback (most recent call last): 
    File "writefields.py", line 43, in <module> 
     formatted = code.format(**field) 
ValueError: unexpected '{' in field name 

जहां तक ​​मेरा बता सकते हैं, या तो प्रतिस्थापन क्षेत्रों या dicts कि समस्याएं उत्पन्न कर दिया जाना चाहिए में बिना किसी अतिरिक्त ब्रेसिज़ हैं, इसलिए किसी भी मदद करेंगे तारीफ़ लें।

code = ''' 
// {label} 
add_filter('submit_job_form_fields', 'frontend_add_{fieldname}_field'); 
function frontend_add_{fieldname}_field($fields) { 
    $fields['job']['job_{fieldname}'] = array(
     'label' => __('{label}', 'job_manager'), 
     'type' => 'text', 
     'required' => {required}, 
     'priority' => 7, 
     'placeholder' => '{placeholder}' 
    ); 
    return $fields; 
} 
add_filter('job_manager_job_listing_data_fields', 'admin_add_{fieldname}_field'); 
function admin_add_{fieldname}_field($fields) { 
    $fields['_job_{fieldname}'] = array(
    'label'  => __('{label}', 'job_manager'), 
    'type'  => 'text', 
    'placeholder' => '{placeholder}', 
    'description' => '' 
); 
    return $fields; 
} 
''' 

fields = [ 
    { 
     'fieldname': 'salary', 
     'label': 'Salary ($)', 
     'required': 'true', 
     'placeholder': 'e.g. 20000', 
    }, 
    { 
     'fieldname': 'test', 
     'label': 'Test Field', 
     'required': 'true', 
     'placeholder': '', 
    } 
] 

with open('field-out.txt', 'w') as f: 
    for field in fields: 
     formatted = code.format(**field) 
     f.write(formatted) 
     f.write('\n') 

उत्तर

14

आप को डबल किसी भी { या } कि एक स्वरूपण प्लेसहोल्डर का हिस्सा नहीं हैं की जरूरत है। उदाहरण के लिए, आपके पास है:

function admin_add_{fieldname}_field($fields) { 
    [....] 
} 

स्ट्रिंग में। { और } प्लेसहोल्डर का हिस्सा नहीं हैं।

उन घुंघराले ब्रेसिज़ को दोगुना करना उनसे बच निकला; अंतिम आउटपुट में एकल { और } वर्ण फिर से होंगे:

code = ''' 
// {label} 
add_filter('submit_job_form_fields', 'frontend_add_{fieldname}_field'); 
function frontend_add_{fieldname}_field($fields) {{ 
    $fields['job']['job_{fieldname}'] = array(
     'label' => __('{label}', 'job_manager'), 
     'type' => 'text', 
     'required' => {required}, 
     'priority' => 7, 
     'placeholder' => '{placeholder}' 
    ); 
    return $fields; 
}} 
add_filter('job_manager_job_listing_data_fields', 'admin_add_{fieldname}_field'); 
function admin_add_{fieldname}_field($fields) {{ 
    $fields['_job_{fieldname}'] = array(
    'label'  => __('{label}', 'job_manager'), 
    'type'  => 'text', 
    'placeholder' => '{placeholder}', 
    'description' => '' 
); 
    return $fields; 
}} 
''' 
संबंधित मुद्दे