I think for a simple website, especially one with spartenweb or zero JS principles, a language with an architecture like PHP or ASP/ASPX fits well, where you just write HTML and server side code in the same file, and you navigate to that file from your URL to load it. For example, wwwroot/path/to/page.php
on the server corresponds to https://example.com/path/to/page.php
Problem is, both PHP and ASP are pretty terrible languages, and ASP(X) has the additional dealbreaker of not being open source and only running on Windows servers, so I don’t really want to use any of them (I’ve tried all three), so are there any better web languages or web frameworks that does something similar?
deleted by creator
try rocket, the rust framework. it’s fast, simple and powerful. it doesn’t have the directory structure thing you want by default, but there’s nothing stopping you from using it like that. there’s not really any boilerplate so each file would just be a function that returns your html which is generated by server-side code (or is static). it also lets you handle dynamic routes and url queries VERY cleanly. you’d have to write your html in a string if you used the default stuff, but you can use typed_html, a small library that provides a macro (rust macros are not your usual evil macros) for writing html a bit more naturally. or you can use rocket’s built-in template engine support (i think it’s just tera and handlebars by default, i couldn’t see any others mentioned), though i haven’t used that so i can’t say how good it is.
rocket is a great way to do nojs sites, because it’s built for APIs and not “modern” web pages, and it’s made so that you barely notice it even exists, so you can just write code/html like normal. the best thing is how it lets you respond to input, through very powerful dynamic URLs, through queries/forms, through static URLs, or through a combination of all of those
(i love how the other guy wrote a one sentence recommendation while i wrote an essay. sry lol)
What’s interesting is that even though code is mixed with html by design in PHP, ultimately a lot of frameworks tend to create a whole other layer of templates, complete with pseudocode like loops and conditionals. If you’re going to do that, you might as well just do CGI methinks.
Mixing code and page layout isn’t the solution it appears to be. Another fun approach is to use sophisticated XSL templates to generate the HTML from XML data, and CSS to style it.
check out java server pages
Depending on what you want to do and how much server side the server side code really needs to be, I’d suggest you take a look at:
- Django: Full blown Python web application framework with database migrations and a lot more of bells and whistles
- elm pages: Static page generator around the elm programming language, where you can bake a lot of things into a (after compilation) static html page but still have a very powerful and flexible language for dynamic content at your fingertips
deleted by creator
SWI-Prolog has a web framework built in that ties your code to your HTML in structure. There’s a good tutorial on it available.
This is a bad idea programming-wise, since you want to separate templates and output due to DRY principle, Separation of Concerns, maybe the MVC programming paradigms and general code cleanliness.
If you do this wrong with dynamic pages, you open up issues with code injection. At the very least, your code will be hard to read.
Code injection is an issue everywhere as soon as you leave the realm of purely static html. That’s why I’d recommend to use a framework to do this instead of sanitizing every possible input yourself.
DRY, SoC etc. are all sane principles, but that’s not to say that you can’t have an html template and some dynamic language in the same file. You’d only have to think differently about encapsulation and code reuse. Components are a popular pattern these days, exposing functionality that you want to have in multiple places across your page.
Well said. Of course this is not a black and white issue. Some code and design can be mixed but the PHP way of allowing HTML with server side includes, sometimes even based on form input, is just a recipe for disaster. That’s actually why Cake and Laravel don’t even really allow this, or at least make it super hard to do.