Пирамидада HTML-ны қалай қарауға болады?

Мен шынымен Пирамидаға (және жалпы веб-шеңберлерге жаңа) өте жаңа.

Мен mongoDB дүкенінен қайтарылған деректерді түзете алу үшін HTML-пішімін HTML-нан қайтара алатын сахнаға шығуға тырысамын.

Менің пирамида жобасында __ init __ py стандартты болып табылады:

def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
config = Configurator(root_factory = Root, settings = settings)
config.add_view('hermesweb.views.my_view',
                context = 'hermesweb:resources.Root',
                renderer = 'hermesweb:templates/mytemplate.pt')
config.add_static_view('static', 'hermesweb:static', cache_max_age = 3600)
views.myDB = connect() # connect to my mongoDB

Менің templates/mytemplate.pt мынадай көрінеді:



<head><title>My test title. . . </title></head>
<body>
    <div>
        

Perform a search

        <form method="GET" action="">
            <div>
                <input type="text" name="id"/>
            </div>
            <input type="submit" value="Submit"/>
        </form>
        

Results

        ${results}
    </div>

Соңында менің views.py мынадай көрінеді:

myDB = "" # ref to the database is assigned on startup.
def my_view(request):
    key = request.GET.get('id', None)
    results = ""
    if key:
        db_res = myDB.call_some_find_function(key)
        for data in db_res:
            results = "%s 
  • %s
  •  " % (results, data)
            results = "
      %s
    " % results
    
        return {'results': results}
    

    Пішінге терминді енгізгенде және my_view функциясы деп аталады, дерекқор сұралған және дұрыс нәтиже веб-беттегі html-ге айналдырылған жолдан емес, дұрыс шығарылады. орнына веб-беттегі жол ретінде басылған.

    Мен бұл мазмұн түрімен айналысатын нәрсе деп ойлаймын? Бірақ пирамида әлі де жақсы түсінбеймін. Біреуі браузер арқылы html ретінде түсіндірілген html-ні қайтару үшін оны қалай алуға болатынын түсіндіре ала ма?

    Қосымша сұрақ - дерекқор қоңырауының осы түрі үшін views.py пайдалану керек пе? Мен әлі күнге дейін барлық түбірлік объект оған енген жерде шатастырып жатырмын. Мен MongoDB дерекқордың резервтік көшірмесі ретінде пайдаланамын. . .

    2

    2 жауаптар

    To prevent Chameleon from escaping the ${result} variable, you need to use ${structure: result}, as per the documentation: http://chameleon.readthedocs.org/en/latest/reference.html#structure

    6
    қосылды
    сілтемесін жаңартты
    қосылды автор Michael Merickel, көзі
    сілтеме үзілген
    қосылды автор GertV, көзі

    Жол жойылып кетеді, ол сіздің сайтыңызға енгізілмеген кодты болдырмау үшін үлгілерге енгізілген жолдар үшін әдетті болады. Жолды қауіпсіз деп белгілеу үшін, сіз оны литерал ретінде белгілегіңіз келеді, сондықтан оны аман қалдырмаңыз. Пирамида (пилондар секілді) веб-көмекші модульмен бірге жеткізіледі деп ойлаймын, сондықтан сіз нақты функцияны импорттай аласыз:

    from webhelpers.html import literal
    

    содан кейін түпкілікті нәтиже тапсырмасын келесіге ауыстырыңыз:

    results = literal("
      %s
    " %results)
    

    If literal doesn't ship with pyramid as I suspect, see this post: Python Pyramid & Chameleon templating language escapes html

    Өңдеу: қауіпсіздікті сақтау үшін html-ге енгізбес бұрын, сіз сіздің деректеріңізден db-дан қашып кетуі мүмкін екенін ескеріңіз. Бұл үшін cgi.escape қолдануға болады.

    0
    қосылды