Currently, I have routing set up in my project. Every new user is redirected to:
localhost:4200/default-path/login
Once the user logs in, they're redirected to the home module, which has some child routes the user can navigate to.
localhost:4200/default-path/home
localhost:4200/default-path/home/account
localhost:4200/default-path/home/account/profile
localhost:4200/default-path/home/dashboard
... and so on.
Now, the part in bold is already set up in the home module, and doesn't need further editing. However, I'd like to change default-path to something else.
Say, each user can belong to one of three projects: Project blue, red or green. This information is available only after the user submits their credentials and hits the login button.
What I'd like for the routes to say after login is:
localhost:4200/project-blue/home
localhost:4200/project-red/home
localhost:4200/project-green/home
Bear in mind, the parts in bold are NOT different modules with different associated components, they're just constants I'd like to see in the URL.
Currently, my <base> tag in the index is like <base href='/'> I'm trying to edit this attribute. What I've got is something like:
processLoginSuccess(loginTicket): void {
const routeName = loginTicket.baseUrl // returns 'project-red'
let b = document.getElementsByTagName('base')[0]
b.setAttribute('href', routeName )
this._router.navigate(['/home']);
}
But this doesn't seem to work.
Any ideas?
Instead of setting the base element's href value, you can set the base URL programmatically, by providing for APP_BASE_HREF with your custom operation.
This has been already discussed here: https://stackoverflow.com/a/41674411/415790
Related
I am creating a simple eBay like e-commerce website to get introduced with django. For removing an item from the watchlist, I placed two same links in two different HTML files, that is, I can either remove the item from the watchlist.html page or either from the item's page which was saved as listing.html. The url for both the pages look like this:
Remove from watchlist
Now, in my views.py, I want to render different pages on the basis of the request. For example, if someone clicked Remove from watchlist from listing.html then the link should redirect again to listing.html and same goes for the watchlist.html.
I tried using request.resolver_match.view_name but this gave me 'removeFromWatchlist' as the url namespace for both of these request is same.
Is there any way I can render two different HTML pages based on the origin of the url request?
Also, this is my second question here so apologies for incorrect or bad formatting.
You could check the HTTP_REFERER in the request.META attribute of the view to get the url that referred the request as so:
from django.shortcuts import redirect
def myview(request):
...
return redirect(request.META.get("HTTP_REFERER"))#Or however you prefer redirecting
https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.META
I need to dynamically get the root URL from a page to set as part of the Open Graph tags that will fetch the desired image. The closest I got was with ${request.requestURL}, but it returns the whole URL, like:
https://localhost:8080/abc/123/example/example.jsp
But I would like for it to return just the root URL, like:
https://localhost:8080/
Is there a way to do this?
This is the header of a page that will be the product page of a e-commerce. So, I would need to get the root URL of whatever part of the website the user is in to fill in with the product-specific URL. I've tried lots of methods, like ${request.requestURI} and ${request.contextpath} but none of them return what I want.
Don't know if it's the optimal solution, but I achieved what I needed assembling the url like this:
${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}
I'm new to MVC coding, and have been at this issue for a couple days now. I'm having trouble setting up multiple routing schemes, and having them work as intended. Here is what I've got.
Framework
Products/Info.cshtml
Products/Edit.cshtml
Model
ProductCategory.Id
ProductCategory.CategoryName
What I'm wanting to do is be able to have 2 different routing schemes in place
Products/Edit/Id
Products/Info/CategoryName
So here is how I'm structuring the tags in the documents
For Products/Edit/Id
< a asp-controller="Products" asp-action="Edit" asp-route-id="#item.Id">Edit< /a>
For Products/Info/CategoryName
< a asp-controller="Products" asp-action="Info" asp-route-category="#item.CategoryName">#item.CategoryName< /a>
So the thing is, this will actually work, functionally, but my hyperlinks for the Products/Info/CategoryName get rendered as query strings rather than the more user friendly version, for instance one category is "Fireplaces", so my links for Info become
Products/Info?category=Fireplaces
instead of what I'm wanting
Products/Info/Fireplaces
How can I configure my routes so that the Controller/Action/Parameter call works for both? I've already tried adding specific routes to app.UseMvc(), and again they work functionally, but the Info links still render out as query strings.
Ok, finally got to the bottom of it. Rather than trying to define routes the old way, with app.UseMvc(), I was able to use the new DataAnnotations in the Controller class to define the route, which resulted in creating user friendly links like I wanted, rather than the query string links. So for my Info() method in my controller class, I changed to look like
[HttpGet]
[ActionName("Info")]
[Route("Products/Info/{category}")]
public IActionResult Info(string category)
{
.....
return View(productCategory);
}
I need to scrape some URLs from some retailer product pages, but the specific URLs I need to get aren't in the html part of the page. The html looks like this for each of the items on which one would click to get to the page with the URL I need to grab:
<div id="name" class="hand bold" onclick="AVON.productcontrol.Go(45714);">ADVANCE TECHNIQUES Color Protection Conditioner Bonus Size</div>
I wrote the following to get URLs from the page, but since the actual URLs I need don’t seem to be stored in the page, it doesn’t get what I need:
def getUrls(URL):
"""input: product page url
output: list of urls to products
"""
connection = urllib.urlopen(URL)
dom = lxml.html.fromstring(connection.read())
selAnchor = CSSSelector('a')
foundElements = selAnchor(dom)
urlList = [e.get('href') for e in foundElements]
return urlList
Is there a way to get the link that the function after ‘onclick’ (I guess AVON.productcontrol.Go(#);) takes you to? I don’t fully understand html, and while I’ve read a bit about onclick, I can’t figure out how the function after 'onclick' works.
In order to find the URL that you are taken to on click, you need to find the JavaScript source code of the 'Go' function and read and understand it. It's buried somewhere within a tag or some JavaScript .js file that is referenced directly or indirectly by the HTML page. Happy digging!
Or: you automate the interaction with the web page with a tool like Selenium (http://docs.seleniumhq.org/) and just check where it takes you if you click.
So there should be a very basic way to do this, but unfortunately I don't seem to be able to find it.
How can one set an Href link to point to the 'base website url' + the 'link', rather than adding the link to the current page.
I.e. if I'm at www.example.com/content1/
I want the search function to go to www.example.com/search/
and not www.example.com/content1/search
I could just specify "www.example.com/search/" but then if it page is deployed locally I end up with a bunch of links to non-existent pages or vice versa. How can I specify the The Base hosting URL using DJango (whichever the server is running, whether the hostname, the current server ip, localhost etc.).
The best way to do this is the name your urls and then use the url template tag. Example below:
First, name your views. Use something like:
urlpatterns = [
...
url(r'^search/$', views.search_view, name="search"),
...
]
In this example, you've got your url for your example.com/search/ view. It is named 'search', which can be used url template tags and using the reverse() function.
Next, in your template, use the url tag with your url name:
Search
You shouldn't need to add 'base website url' to your href, it is implied. Make sure href is prefixed with '/' to set and absolute path and no '/' for relative.
home
is the same as
home
and will work no matter which sub directory you are in
If you are on the homepage and you use the link:
sample
it will effectively equal:
sample
but that same link used on the page http://www.mywebsite.com/sample will equate to:
sample
using:
sample
Will always equate to the following no matter where on the site it is used:
sample
If you are using django consider using the url template tag as Alex suggested:
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#url
Make the link point to /search.
Any link that starts with / is relative to the domain root (say, http://example.com/) whereas any other relative link is relative to the current URL.