Как загрузить веб-страницу, а также вызвать метод в колбе при нажатии на гиперссылку? - PullRequest
0 голосов
/ 07 октября 2019

Я создал веб-страницу, используя python и флешку, и теперь на веб-странице у меня есть гиперссылки. Мне нужно сохранить каждую нажатую гиперссылку, скажем, в файле, а также отправить пользователя на эту страницу с гиперссылкой.

Я попытался настроить метод перенаправления фляги, но он только отправляет пользователя на страницу

это мой файл index.html

<html>
<body>

  {% for names,links in my_list %}

    <a href = {{links}} onclick={{ clever_function({{links}}) }} >{{names}}</p>

  {% endfor %}

<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>


</body>
</html>

это код драйвера моего приложения фляги:

def clever_function(a):


    print("sd"+a)
    return True

app.jinja_env.globals.update(clever_function=clever_function)
#////////////////////////////////////
@app.route('/')
def index():
    return render_template("index.html",my_list = zip(array_of_names,array_of_links))

я хочу знать, какие гиперссылки были нажаты в файле или массиве.

** РЕДАКТИРОВАТЬ: СЕЙЧАС Я ПОЛУЧАЮ ЭТУ ОШИБКУ: (НА ВЕБ-СТРАНИЦЕ)

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/var/www/news-scraper/hello.py", line 205, in index
    return render_template("index.html",my_list = zip(array_of_names,array_of_links))
  File "/usr/lib/python3/dist-packages/flask/templating.py", line 134, in render_template
    return _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 869, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 830, in get_template
    return self._load_template(name, self.make_globals(globals))
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 804, in _load_template
    template = self.loader.load(self, name, globals)
  File "/usr/lib/python3/dist-packages/jinja2/loaders.py", line 125, in load
    code = environment.compile(source, name, filename)
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 591, in compile
    self.handle_exception(exc_info, source_hint=source_hint)
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/jinja2/_compat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "/var/www/news-scraper/templates/index.html", line 6, in template
    <a href = {{links}} onclick={{ clever_function({{links}}) }} >{{names}}</p>
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 497, in _parse
    return Parser(self, source, name, encode_filename(filename)).parse()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 901, in parse
    result = nodes.Template(self.subparse(), lineno=1)
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 883, in subparse
    rv = self.parse_statement()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 130, in parse_statement
    return getattr(self, 'parse_' + self.stream.current.value)()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 199, in parse_for
    body = self.parse_statements(('name:endfor', 'name:else'))
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 165, in parse_statements
    result = self.subparse(end_tokens)
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 875, in subparse
    add_data(self.parse_tuple(with_condexpr=True))
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 620, in parse_tuple
    args.append(parse())
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 432, in parse_expression
    return self.parse_condexpr()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 437, in parse_condexpr
    expr1 = self.parse_or()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 450, in parse_or
    left = self.parse_and()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 459, in parse_and
    left = self.parse_not()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 470, in parse_not
    return self.parse_compare()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 474, in parse_compare
    expr = self.parse_math1()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 496, in parse_math1
    left = self.parse_concat()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 507, in parse_concat
    args = [self.parse_math2()]
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 517, in parse_math2
    left = self.parse_pow()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 528, in parse_pow
    left = self.parse_unary()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 547, in parse_unary
    node = self.parse_postfix(node)
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 676, in parse_postfix
    node = self.parse_call(node)
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 790, in parse_call
    args.append(self.parse_expression())
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 432, in parse_expression
    return self.parse_condexpr()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 437, in parse_condexpr
    expr1 = self.parse_or()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 450, in parse_or
    left = self.parse_and()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 459, in parse_and
    left = self.parse_not()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 470, in parse_not
    return self.parse_compare()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 474, in parse_compare
    expr = self.parse_math1()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 496, in parse_math1
    left = self.parse_concat()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 507, in parse_concat
    args = [self.parse_math2()]
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 517, in parse_math2
    left = self.parse_pow()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 528, in parse_pow
    left = self.parse_unary()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 546, in parse_unary
    node = self.parse_primary()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 581, in parse_primary
    node = self.parse_dict()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 661, in parse_dict
    key = self.parse_expression()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 432, in parse_expression
    return self.parse_condexpr()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 437, in parse_condexpr
    expr1 = self.parse_or()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 450, in parse_or
    left = self.parse_and()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 459, in parse_and
    left = self.parse_not()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 470, in parse_not
    return self.parse_compare()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 474, in parse_compare
    expr = self.parse_math1()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 496, in parse_math1
    left = self.parse_concat()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 507, in parse_concat
    args = [self.parse_math2()]
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 517, in parse_math2
    left = self.parse_pow()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 528, in parse_pow
    left = self.parse_unary()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 546, in parse_unary
    node = self.parse_primary()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 581, in parse_primary
    node = self.parse_dict()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 662, in parse_dict
    self.stream.expect('colon')
  File "/usr/lib/python3/dist-packages/jinja2/lexer.py", line 384, in expect
    self.name, self.filename)
jinja2.exceptions.TemplateSyntaxError: expected token ':', got '}'

Я использую "{{links}}", чтобы я мог передать URLкод питона

1 Ответ

0 голосов
/ 07 октября 2019

Если эти "ссылки" являются вашими собственными, то вы можете рассчитывать внутри самого бэкэнда. Если внешний, то напишите код JavaScript, который подсчитывает клики, а затем откройте эту ссылку на другой вкладке.

Используйте window.open('url', '_blank);

для подсчета этих кликов, вы можете написать прослушиватель onClick для этогоa элемент, такой как псевдокод, показанный ниже

const clicksCount = {}
function aClickListener(link, name) {
   clicksCount[name] = clicksCount[name] ? clicksCount[name] + 1 : 1;
   window.open(link, '_blank);
}

PS: прослушиватели кликов получают объект события по умолчанию, ищите его.

PPS: Но эти подсчеты исчезнут, как толькостраница обновляется. Они не хранятся постоянно. Для хранения в БД или файле вам придется отправить их обратно в бэкэнд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...