Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE] allow setting of default title in fast_app() #485

Open
2 tasks done
mmacpherson opened this issue Oct 1, 2024 · 0 comments
Open
2 tasks done

[FEATURE] allow setting of default title in fast_app() #485

mmacpherson opened this issue Oct 1, 2024 · 0 comments
Labels
enhancement New feature or request

Comments

@mmacpherson
Copy link

mmacpherson commented Oct 1, 2024

If you'd like to discuss your feature idea first with the community (highly recommended!) please visit our Discord channel.

Is your feature request related to a problem? Please describe.

Right now, the default title for all (non-htmx) routes is "FastHTML page". I think it would be useful to be able to set a default title that is relevant to one's own project. This would guarantee that a non-sequitur title would not appear if one neglected to add a title to a given route, and would save a little boilerplate for routes where a custom title isn't warranted.

This question has previously been raised here: #208

JPH notes that the standard pattern is to set a title per route, and notes that "it would be a bit tricky to support having titles defined in headers too." Both those points make sense, and JPH is of course best-positioned to make judgments about the difficulty of supporting features.

Describe the solution you'd like

There might be a fast_app(..., title="my site", ...) or fast_app(..., default_title="my site", ...) that effectively replaces the default "FastHTML page" with "my site".

Or the pattern might be to allow the definition of a Title() in the hdrs= argument to fast_app(). (This is allowed now, it just doesn't have the intended effect because the headers defined via hdrs= appear after the default title.)

Example code

For the moment, I have been implementing a default title using Beforeware, as follows:

def inject_title(req, sess):
    req.injects = [Title("my site"), *req.injects]

app, rt = fast_app(..., before=[..., inject_title], ...)

(The code where the contents of req.injects gets converted into headers is here, i.e. in fasthtml.core:_xt_cts().)

This same mechanism might be used, i.e. adding a default_title= value to req.injects.

Alternative 2

Another way might be to, in fasthtml.core:_xt_cts(), flip the order of titles and req.hdrs from:

resp = Html(Head(*titles, *flat_xt(req.hdrs)), ...)

to

resp = Html(Head(*flat_xt(req.hdrs)), *titles, ...)

This way any included Title() in fast_app(hdrs=...) would precede those in titles, and be shown in the browser.

Alternative 3

A .default_title attribute defined via fast_app(), a la def fast_app(..., default_title: str="FastHTML page", ...): ... could be added to the req object, so the line in fasthtml.core:_xt_cts():

if not titles: titles = [Title('FastHTML page')]

might become:

if not titles: titles = [Title(req.default_title)]

Similar implementations
N/A

Problem solved

Mentioned above. Avoids non sequitur titles, minor arguable boilerplate reduction.

Additional context

None.

Confirmation
Please confirm the following:

  • I have checked the existing issues and pull requests to ensure this feature hasn't been requested before.
  • I have read the project's documentation to ensure this feature doesn't already exist.
@mmacpherson mmacpherson added the enhancement New feature or request label Oct 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant