добавить скрытый заголовок для URL-адреса

У меня есть url like /posts/1 , где 1 относится к id статьи в db.

 @bp.route('/<post_id>') @login_required def post(post_id): """ find the post and then show it """ p = Post.query.get(post_id) return render_template("post/single_post.html", post=p) 

Однако, что я хотел бы сделать, это иметь URL-адрес с каким-то скрытым заголовком, например /posts/1/my_stack_overflow_question_is_bad . Я могу создать свойство slugify в модели:

 class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String) html = db.Column(db.String) @property def slugified_title(): return slugify(self.title, separator="_", to_lower=True) 

но как бы поместить это в URL?

One Solution collect form web for “добавить скрытый заголовок для URL-адреса”

Вам просто нужно добавить элемент slug к URL-адресу:

 @bp.route('/<post_id>/<slug>') @login_required def post(post_id, slug): """ find the post and then show it """ p = Post.query.get(post_id) return render_template("post/single_post.html", post=p) 

Затем, когда вы хотите создать URL-адрес для него, просто поставьте slug в функцию url_for :

 p = Post.query.get(1) url_for('post', post_id=p.id, slug=p.slugified_title) 

Это может стать немного утомительным, поэтому я имею тенденцию иметь декоратор permalink :

 # Taken from http://flask.pocoo.org/snippets/6/ from flask import url_for from werkzeug.routing import BuildError def permalink(function): def inner(*args, **kwargs): endpoint, values = function(*args, **kwargs) try: return url_for(endpoint, **values) except BuildError: return return inner 

Затем настройте мою модель, чтобы использовать ее:

 class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String) html = db.Column(db.String) @property def slugified_title(): return slugify(self.title, separator="_", to_lower=True) @permalink def url(self): # where 'post' is the title of your route that displays the post return 'post', {'post_id': self.id, 'slug':self.slugified_title} 

Таким образом, когда мне нужен URL-адрес, я могу просто запросить объект для его URL-адреса, и вам не нужно вручную проходить процедуру url_for.

  • Получение тестов для параллелизации с использованием носа в python
  • Как определить __hash__, когда объект может быть равен различным типам объектов?
  • пароль ткани
  • Ошибка округления средней величины
  • Penton Flask Intentional Empty Response
  • Получение метода 405 не допускается при использовании метода POST в бутылке
  • Ткань env.roledefs действует не так, как ожидалось
  • Углы между двумя n-мерными векторами в Python
  • Python - лучший язык программирования в мире.