Reputation: 943
I have created a webpage using python and flask and now in the webpage, i have hyperlinks. i need to save each clicked hyperlink in say a file and also send the user to that hyperlinked page.
i have tried to setup a flask redirect method but it only sends the user to the page
this is my index.html file
<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>
this is my flask app driver code:
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))
i want to know which all hyperlinks were clicked into a file or a array.
**EDIT: NOW I GET THIS ERROR: ( IN THE WEBPAGE )
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 '}'
i am using the "{{links}}" so that i can pass on the url to the python code
Upvotes: 0
Views: 585
Reputation: 121
If these "links" are your own, then you can count within your backend itself. If external, then write a javascript code which counts clicks and then open that link in another tab.
Use window.open('url', '_blank);
for counting these link clicks, you can write a onClick listener on that a
element like pseudo code shown below
const clicksCount = {}
function aClickListener(link, name) {
clicksCount[name] = clicksCount[name] ? clicksCount[name] + 1 : 1;
window.open(link, '_blank);
}
P.S.: Click listeners receive event object by default, look out for it.
P.P.S: But these counts will go away as soon as page refreshes. They are not stored permanently. For storing in DB or file, you'll have to send them back to backend.
Upvotes: 1